如何识别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