当在网页内使用了ASP.NET的LoginStatus控件后,客户端单击Logout链接,会激发页面回送,即PostBack。对于LoginStatus控件,这一过程是由动态生成的客户端脚本完成的,
LoginStatus控件在客户端对应的标记如下:
<a id="LoginStatus1" href="javascript:__doPostBack('LoginStatus1$ctl00','')">Logout</a>
其中javascript:__doPostBack(arg1,arg2)方法如下:
<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>
结合href的内容,通过doPostBack方法的实现可以看出,doPostBack执行过程中,引发事件的控件ID(在本例中为'LoginStatus1$ctl00')和事件的参数(本例中为'')被写入到表单的两个域中,分别为__EVENTTARGET和__EVENTARGUMENT。这两个域为隐藏域。因此,当PostBack发生后,我们在服务器端可以通过读取Post表单的这两个隐藏域来获取激发回送事件的控件ID和事件参数。例如:
String target = Request.Form["__EVENTTARGET"];
有了以上方法,可以方便地根据回送事件的上下文控制后续的处理动作。有了这两个隐藏域,开发者无需再去手工添加客户端脚本来标记事件。
关于__doPostBack方法的更详尽的分析,可以参见 http://www.cnblogs.com/jinianjun/archive/2012/02/09/2343868.html