页面回传的时候如何获取引发源?

在开发asp.net程序过程中 ,经常需要知道在页面发生postback的时候,是由页面上哪个控件引发的。

比如页面上引入了一个用户控件,该用户控件有若干服务器端的按钮,由于点击事件都写在用户控件的后台代码里了,引用页面上却又想针对点击不同的按钮做一些不同的处理,但却没有办法知道点击的是哪个按钮;

又或者,页面上有个按钮,我们想在想在执行button_click()方法之前先执行某些代码,写在page_load里面呢,也同样无法区分是由哪个控件引发的page_load(除非你的页面只有这个按钮可以引发回传),

我上sdk上查了一下,发现页面回传的时候,该事件会在page_load之后被执行,参数中带有引发回传的控件,

重写该方法即可

protected override void RaisePostBackEvent(IPostBackEventHandler sourceControl, string eventArgument)
  {

 
   base.RaisePostBackEvent (sourceControl, eventArgument);

//下面加入你要执行的代码

  {

if(((控件类型)  sourceControl).控件属性=="xxxxx")

}
  }

 刚刚在csdn参考了某位网友的解答,原来这样也可以

在page_load()

{

ArrayList list = new ArrayList(Request.Form.Keys);
if (list.Contains(Button1.ID))
{
    Response.Write(Button1.Text+"被按下");
}

}

这里我比较奇怪,表单被提交的时候,只有textBox和被点击的按钮会被提交,别的按钮不会北提交,也就是说,如果有若干个可引发回传的按钮,只有被点击的才会提交。没想到。

我本来还想着如果在页面上放一个隐藏的textbox(是客户端隐藏,不是服务器端的隐藏),写一个脚本,当按钮被点击的时候,把按钮id写入该textbox,然后在page_load里就可以读取该id了。。。。 看来不需要这么麻烦。

原文地址:https://www.cnblogs.com/lindping/p/2004845.html