在Page_Load期间,我想捕获执行回发的控件。
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
}
// Capture the control ID here.
}
像往常一样,任何想法都会非常感激!
答案 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。