之前有讨论过ASP.NET Web Form "事件"里面的 "sender"
详见 http://www.dotblogs.com.tw/mis2000lab/Tags/sender/default.aspx
有位朋友问到「在Page_Load事件里面,如何得知是哪个控件触发 PostBack ??」
我们写一个简单程序试试看
画面上只有一个 <asp:Button>按钮:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
}
else {
Button btn = (Button)sender; // 注意 错误讯息!!
Response.Write("Button被按下了(Page_Load)!---" + btn.Text);
//讯息如下:
‘/‘ 应用程序中发生服务器错误。
无法将类型 ‘ASP.postback_sender_aspx‘ 的对象转换为类型 ‘System.Web.UI.WebControls.Button‘。
(批注:postback_sender_aspx 是我程序的文件名 PostBack_Sender.aspx)
}
}
protected void Button1_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
Response.Write("<hr />Button被按下了(Button1_Click)!---" + btn.Text);
}
好的,我们把 Page_Load事件的程序改写一下
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
}
else {
var btn = sender; // 注意讯息!!
Response.Write("Button被按下了(Page_Load)!---" + btn.ToString());
}
}
执行成果如下:
Button被按下了(Page_Load)!---ASP.postback_sender_aspx
(批注:这是我程序的文件名 PostBack_Sender.aspx)
如果您想要知道是哪个控件,触发了ASP.NET 的PostBack
这两篇文章有简单的范例,可以帮助您抓得到:
关键词 C# -- Request.Params["__EVENTTARGET"]
关键词 VB -- Request.Params("__EVENTTARGET")
Page_Load与sender -- PostBack是由哪个 ASP.NET控件引起 ?
原文:http://www.cnblogs.com/mis2000lab/p/5067302.html