1

嗨,我对 asp.net 中的按钮单击有一个疑问,我已经在 .aspx 页面中放置了带有 OnClick 事件之类的按钮控件和其他一些控件(按钮、文本框)。当我运行页面时,按钮显示在浏览器的页面源中,就像这里一样,它不显示onclick事件,然后页面如何调用服务器端的按钮点击,服务器端如何识别哪个按钮导致提交,以及此页面如何移动到服务器端。

4

3 回答 3

13

如果是 about <asp:Button />,则此控件默认呈现type="submit"的输​​入,它使用浏览器的默认机制提交表单。ASP .Net 通过检查发布的值来识别单击了哪个按钮。当浏览器提交表单时,它会在 POST 请求中写入单击按钮的名称和值以及其他输入的名称和值,不包括其他提交输入。因此,单个提交输入的名称被发送到服务器,这样 ASP .Net 就会检查单击了哪个按钮。

此服务器控件还具有UseSubmitBehavior属性,如果将其设置为 false,它将生成按钮类型的输入。由于按钮不提交表单,ASP .Net 会生成一些 javascript 来完成这项工作

<script type="text/javascript">    
//<![CDATA[    
var theForm = document.forms['form1'];    
if (!theForm) {    
    theForm = document.form1;    
}

function __doPostBack(eventTarget, eventArgument) {    
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {    
        theForm.__EVENTTARGET.value = eventTarget;    
        theForm.__EVENTARGUMENT.value = eventArgument;    
        theForm.submit();    
    }    
}    
//]]>    
</script>

通知_EVENTTARGET __EVENTARGUMENT字段。设置这些字段以便 ASP .Net 知道在客户端上单击了哪个按钮。

<input type="button" 
      name="rptMain$ctl02$DeleteButton" 
      value="Delete" onclick="__doPostBack('rptMain$ctl02$DeleteButton','')"         
      id="rptMain_ctl02_DeleteButton" />

注意传递给 __doPostBack 函数的参数。输入的名称被传递并设置为 EVENTTARGET。EVENTTARGET 的值将由 ASP .Net 读取,并基于此触发 Click 事件<asp:Button />控件的 Click 事件

EVENTARGUMENT 由 ItemCommand 事件使用,通常放置在 DataBound 控件中并包含有关该操作的特定数据,稍后将在处理事件时使用。例如,该数据可以是数据库表中的行 ID。

于 2012-04-07T12:30:47.847 回答
2

在 ASP.NET Web 表单中,所有按钮都会导致将整个表单提交到服务器。Web 表单引擎检查单击了哪个按钮并调用适当的事件处理程序。

于 2012-04-07T11:59:50.497 回答
0

如果您指定控件的 onclick 属性,它不会像这样传递给客户端。相反,它仅在解析 aspx 文件时指定 IIS 的接线

替代看起来像这样:

myControl.Click += new EventHandler(specifiedMethod);

所以当事件发生时,它知道调用哪个方法。

于 2012-04-07T12:02:59.883 回答