在开发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了。。。。 看来不需要这么麻烦。