服务器端如何识别按钮单击事件

1 asp.net webforms

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

Adr*_*ode 13

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

此服务器控件还具有属性UseSubmitBehavior,如果将其设置为false,则将生成类型为button的输入.由于按钮不提交表单,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>
Run Code Online (Sandbox Code Playgroud)

注意_ EVENTTARGET_EVENTARGUMENT字段.这些字段设置为ASP .Net将知道客户端上单击了哪个按钮.

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

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

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

  • 这种答案是让我回到堆栈溢出的原因.详细,精心设计和信息丰富.我学到了一些新东西.+1. (2认同)