ASP.NET ::在page_load期间,如何获取提交回发的控件的ID?

时间:2010-06-10 20:34:03

标签: asp.net postback

在Page_Load期间,我想捕获执行回发的控件。

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {

    }

    // Capture the control ID here.
}

像往常一样,任何想法都会非常感激!

4 个答案:

答案 0 :(得分:6)

对于任何对此感兴趣的人(至少对我有用的东西)。 Cen提供了答案。

在Page_Load事件中添加:

Control c= GetPostBackControl(this.Page); 

if(c != null) 
{ 
    if (c.Id == "btnSearch") 
    { 
        SetFocus(txtSearch); 
    } 
}

然后在您的基页代码中添加:

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;
}

您可以看到原始帖子here

希望这有帮助。

答案 1 :(得分:2)

您通常可以查看Request.Params["__EVENTTARGET"]。此变量将作为回发的结果填充,并将保留导致它的控件的唯一ID。

不幸的是,这对按钮或图像按钮控件不起作用。对于在这些情况下获得它的看起来非常强大的方法,你可以check out this blog post

答案 2 :(得分:1)

如果有办法做到这一点,我也很想知道它!

但是,您可以为每个可以生成回发的控件设置事件处理程序,并在事件进入时处理它们。

问题在于这些事件是在Page_Load之后处理的。所以你需要在这种方法中做的是为Page_PreRender添加一个处理程序,并在那里处理控制输入。在页面生命周期中,控制事件在Load之后,但在PreRender之前。

答案 3 :(得分:1)

您可以使用Request [“__ EVENTTARGET”]来获取调用回发的控件的ID。