string
ctrlname
=
page.Request.Params.Get(
"
__EVENTTARGET
"
);
if (ctrlname != null && ctrlname != string .Empty)
... {
return this.Page.FindControl(ctrlname);
}
if (ctrlname != null && ctrlname != string .Empty)
... {
return this.Page.FindControl(ctrlname);
}
关键字:_EVENTTARGET.<hidden name="_EVENTTARGET------->...>
以上的代码,是搜索引发页面回发事件的控件,其基理可参阅(英文版).上面的代码貌似解决了查找引发页面回发的控件的功能,然而却有特例.就是这段代码不作用于按钮控件.在查看生成的(render)代码时,从含有名为_EVENTTARGET的标签中,您找不到Button控件,因为它最终render的是<input type=“submit” >标签,所以以上的代码对于button事件来说,是实现不了的。但是我们可以通过其它的途径来获取它。
所需掌握内容:在引发提交事件的控件,只有button控件被存储在回发的form控件集里。所以可以通过一个循环语句找到form控件集中button集中的具体引发事件的那个button控件。
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;
}
... {
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;
}
上面的方法引入了一个参数(page),然后使用这个参数去寻找引发回传事件的控件。我们可以调用这个方法了。
Control c
=
PageUtility.GetPostBackControl(
this
.Page);
if (c != null )
... {
//...
}
if (c != null )
... {
//...
}
希望能帮助大家加深理解,并思索这些原理将怎样用在具体的实例中。以后我会分别搜集介绍。