100分求:页面按钮事件在PostBack的PageLoad中如何获取到触发事件

terry 2011-03-27 07:27:05
现在有个需求,必须做系统级的大调整。
在按钮事件触发后,在执行其他的代码前作一个判断,不同的按钮对应不同的参数。如同按钮权限一样,一个不同的按钮对应不同的权限。如果在每个按钮事件中去增加代码,其工作量可想而知。而且这样的大动作,不到万不得已决不能做。
现在有一个思路。在按钮触发后,回刷页面的PageLoad中是否能够获取到与按钮相关的信息,比如,当前触发的事件名称,按钮名称等等,能在当前Page下有唯一确定的标识。这些标识可以一次性的初始化到数据库,做为基数数据配置,这样就可以在页面的基类的Load方法中统一处理。不必每个页面去修改过代码。
或者其他的思路……


会的帮忙出出主意,不会的帮忙顶顶也行。谢谢。
...全文
277 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
csu__xzp 2012-08-19
  • 打赏
  • 举报
回复
四楼那个不能解决所有问题,尤其是我在pageload时就急需知道那个按钮的时候,6楼的方法目前还在验证
  • 打赏
  • 举报
回复
6楼那个他自己说了要满足一个条件时才会取到
单纯的按钮区分用4楼那个就好了
chao_qiu326 2011-03-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fangxinggood 的回复:]
C# code
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
var request = this.Request;
var ctrl = GetPostBackControl(this);
var id = ctrl.I……
[/Quote]

这个比较靠谱
冷雪液 2011-03-29
  • 打赏
  • 举报
回复
不太懂,感觉应该6楼得那个可以
shine_fly 2011-03-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fangxinggood 的回复:]

C# code
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
var request = this.Request;
var ctrl = GetPostBackControl(this);
var id = ctrl.ID;
……
[/Quote]
wulg10 2011-03-29
  • 打赏
  • 举报
回复
6L的方法可以试下
terry 2011-03-28
  • 打赏
  • 举报
回复
4楼和6楼的法子,我明天测试一下。

主要是为看防止盗链,又不能有太多的改动。

大家继续讨论。

truecoffeefox 2011-03-28
  • 打赏
  • 举报
回复
用aop将权限验证方法注入到按钮方法
haa17 2011-03-27
  • 打赏
  • 举报
回复
恩 ,这个可以。[Quote=引用 6 楼 fangxinggood 的回复:]

C# code
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
var request = this.Request;
var ctrl = GetPostBackControl(this);
var id = ctrl.ID;
……
[/Quote]
段传涛 2011-03-27
  • 打赏
  • 举报
回复
好像使用委托调用(多路)---可以的。
想不起来了。 帮你顶
Rock870210 2011-03-27
  • 打赏
  • 举报
回复
4楼的方法比较实在...
ljx09195117 2011-03-27
  • 打赏
  • 举报
回复
直接把事件名称用URL传回去咯,其实跟楼上的在根本上差不多
机器人 2011-03-27
  • 打赏
  • 举报
回复
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
var request = this.Request;
var ctrl = GetPostBackControl(this);
var id = ctrl.ID;
}
}

public static Control GetPostBackControl(Page page)
{
Control control = null;
string ctrlname = page.Request.Params.Get("__EVENTTARGET");
if (ctrlname != null && ctrlname != String.Empty)
{
control = page.FindControl(ctrlname);
}
else
{
foreach (string ctl in page.Request.Form)
{
Control c = page.FindControl(ctl);
if (c is System.Web.UI.WebControls.Button)
{
control = c; break;
}
}
}
return control;
}
机器人 2011-03-27
  • 打赏
  • 举报
回复
asp:Button 生成的是 submit, 所以不会调用 __doPostback 所以Page_Load里也不能用
"__EVENTTARGET"获得Button ID。。。得考虑别的办法。。。
huangwenquan123 2011-03-27
  • 打赏
  • 举报
回复
        <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="Button" onclick="Button1_Click" />
<asp:Button ID="Button3" runat="server" Text="Button" onclick="Button1_Click" />

    protected void Button1_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
switch (btn.ID)
{
case "Button1":
Response.Write("one");
break;
case "Button2":
Response.Write("two");
break;
case "Button3":
Response.Write("three");
break;
default:
Response.Write("床上等你");
break;
}
}
qlf2008 2011-03-27
  • 打赏
  • 举报
回复
要做到按钮级别的权限管理?可以直接在页面显示的时候就将给用户没有权限的按钮不显示啊。
另外你说的如何取得回发事件源,试一下可以直接从_EVENTTARGET行不,当然肯定不可能和服务端的控件名字一样了,自己稍微处理一下。我也没试过。。。有兴趣可以试一下
最后还不行就看看page的源码看看微软是怎么根据_EVENTTARGET来获得具体的回发事件的信息的吧!
_程序员 2011-03-27
  • 打赏
  • 举报
回复

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧