我对asp.net中的按钮点击有一个疑问,我已经在.aspx页面中放置了按钮控件和OnClick事件以及其他一些控件(按钮,文本框)。当我运行页面时,按钮显示在浏览器的页面源中,就像这里一样,它不显示onclick事件,然后页面如何调用服务器端的按钮单击,服务器端如何识别哪个按钮导致提交,以及此页面如何移动到服务器端。
答案 0 :(得分: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>
注意 _ EVENTTARGET 和 _EVENTARGUMENT 字段。这些字段设置为ASP .Net将知道客户端上单击了哪个按钮。
<input type="button"
name="rptMain$ctl02$DeleteButton"
value="Delete" onclick="__doPostBack('rptMain$ctl02$DeleteButton','')"
id="rptMain_ctl02_DeleteButton" />
注意传递给__doPostBack函数的参数。输入的名称将传递并设置为EVENTTARGET。 ASP .Net将读取EVENTTARGET的值,并基于此将触发<asp:Button />
控件的Click事件
EVENTARGUMENT由ItemCommand事件使用,通常放在DataBound控件中,并包含有关该操作的特定数据,稍后将在处理事件时使用。该数据可以是例如数据库表中的行ID。
答案 1 :(得分:2)
在ASP.NET Web表单中,所有按钮都会将整个表单提交给服务器。 Web表单引擎检查单击了哪个按钮并调用相应的事件处理程序。
答案 2 :(得分:0)
如果指定控件的onclick属性,则不会像这样传递给客户端。相反,它仅在解析aspx文件时指定IIS的连线
替代看起来像这样:
myControl.Click += new EventHandler(specifiedMethod);
因此,当事件发生时,它知道要调用哪个方法。