【发布时间】:2013-03-18 16:37:41
【问题描述】:
我使用了<asp:Button /> 控件,在浏览器中呈现后,该控件没有分配click 事件属性。它究竟是如何调用服务器端事件的?
ASPX 代码:
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="TestClickEvent" />
上述控件在浏览器中呈现为如下代码:
<input type="submit" name="Button1" value="Button" id="Button1">
以下代码在浏览器中呈现,设置__EVENTTARGET。 我的疑问是__doPostBack 方法是如何被调用的?调用方法在哪里?
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
【问题讨论】:
-
请向我们展示您的代码
-
“在浏览器中呈现后” 我认为您混淆了服务器端和客户端代码。
-
我认为你应该阅读这个support.microsoft.com/kb/306459 它解释了 Web 窗体服务器端控件。本质上,回发是通过 javascript 完成的,__EVENTTARGET 和 __VIEWSTATE 隐藏字段分别保存有关单击的内容和页面上的数据的信息。在幕后 __EVENTTARGET 等被询问并调用适当的服务器端事件处理程序。
-
如您所见,您的按钮是“提交”。您呈现的 HTML 源代码中的 asp.net 表单标记会捕获此提交,并知道发件人是谁,因此它可以触发正确的事件
-
在提交按钮回发期间,它不是必需的。当 ASP.NET Framework 接收到带有空的
__EVENTTARGET和__EVENTARGUMENT的 POST 时,它自动知道提交按钮导致了回发。
标签: c# asp.net webforms asp.net-ajax