如何识别Page_Load中的回发事件
时间:2020-03-05 18:49:13 来源:igfitidea点击:
我们有一些旧代码,需要在Page_Load中标识哪个事件导致了回发。
目前,这是通过检查请求数据来实现的,例如...
如果(Request.Form [" __ EVENTTARGET"]!= null
&&(Request.Form [" __ EVENTTARGET"]。IndexOf(" BaseGrid")> -1 // BaseGrid事件(例如sort)
|| Request.Form [" btnSave"]!= null //保存按钮
这很丑陋,如果有人重命名控件,它就会中断。有更好的方法吗?
重写每个页面,以便现在无需在Page_Load中进行检查。
解决方案
回答
这应该使我们获得导致回发的控件:
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; }
在此页面上阅读有关此内容的更多信息:
http://ryanfarley.com/blog/archive/2005/03/11/1886.aspx