ASP.NET如何知道单击哪个Button以引发其事件

时间:2012-05-17 13:59:11

标签: asp.net webforms

使用LinkButton时,页面中会显示doPostBack()函数,单击按钮时会在客户端调用doPostBack()将表单提交给服务器并发送信息两个名为EVENTTARGETEVENTARGUMENT的隐藏字段。 EVENTTARGET保存导致回发的控件名称,EVENTARGUMENT保存任何信息。

使用此ASP.NET引擎从EVENTTARGET参数获取控件名称,该名称导致回发并调用RaisePostBackEvent()事件来调用正确的服务器端事件处理程序。我理解doPostBack()如何工作以及如何调用服务器端事件处理程序。

但是对于普通的服务器按钮,如何在服务器端点击正确的按钮?如何在单击客户端的控件名称上通知ASP.NET?

2 个答案:

答案 0 :(得分:4)

普通的ASP.NET Button呈现为具有唯一<input type="submit">属性的HTML name元素。默认情况下,此HTML元素将触发与当前ASPX页面关联的HTTP POST to the HTML form

当HTTP POST发生时,一系列控制名称/当前值对(称为表单数据集)是从表单内的successful controls构造的,例如文本框内的文本值被传输像这样。一个带有触发提交的按钮名称的对也被发送到服务器,这就是ASP.NET知道哪个按钮触发HTTP POST的方式。

HTML规范保证只对表单中的成功控件考虑发布的表单数据集,并且因为成功控件的定义包含以下规则:

  

如果表单包含多个提交按钮,则仅激活   提交按钮成功。

然后ASP.NET可以检查发布的表单数据集,以检查是否触发了任何正常按钮。

答案 1 :(得分:0)

一般来说,您永远不必担心按钮点击的内部。这就是.Net的美丽。

但是,要明确了解客户端上调用的内容,您只需查看页面的来源并查看按钮的调用内容即可。

示例:

<input name="ctl00$MainContent$btnMyButton" id="ctl00_MainContent_btnMyButton" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$MainContent$btnMyButton", "", true, "", "", false, false))" type="submit" value="My Button"/>

观察.Net注入以下javascript例程:

WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$MainContent$btnMyButton", "", true, "", "", false, false))