Asp.net页面事件引起后台程序处理原理

之前在ASP中,不存在事件处理,传统的处理方法是经过隐藏文本框来提交不一样的参数进行区别用户的不一样动做,或则用不一样的URL查询字符串来区别。ASP.NET中出现了事件处理,让开发人员区分用户动做方便并简单了许多。javascript

实际上,ASP.NET中区别用户动做引起的事件处理一样也是采用了传统方式,不过,MS将其封装了起来,让开发人员用起来更贴近于软件开发中的事件驱动方式。java

在ASP.NET中,几乎每个控件都带有多种事件,开发人员能够在后台经过编写事件捆绑和事件处理来完成不一样的工做。而且,能够在传统方式中没法引起事件的控件中使用事件,如超连接、图片、纯文本。app

ASP.NET中辨别用户动做关联事件的方法整体来看能够分红两种。ide

1、在只存在BUTTON按钮控件的状况下,ASP.NET辨别用户动做并关联事件不须要其余辅助方式。spa

ASP.NET将全部的BUTTON在生成HTML代码的时候都生成为SUBMIT的提交按钮,当多个提交按钮在同一个FORM内时,经过SUBMIT按钮提交的FORM集合中不会包含其余SUBMIT类型的提交按钮,这样,ASP.NET在预处理的前就将全部SUBMIT提交按钮记录下来,用户执行提交后ASP.NET挨个的检查FORM集合中的SUBMIT按钮,由于只可能存在一个SUBMIT,因此检查出的惟一的一个SUBMIT就是用户动做触发提交的按钮,而后再对应的执行这个按钮的后台事件处理。orm

2、在存在传统中并不能直接执行FORM提交的控件时。ASP.NET经过使用两个隐藏的文本表单控件来辨别用户执行的提交动做。事件

当在ASPX文件中使用了LINKBUTTON或则其余不是传统的SUBMIT提交按钮来执行后台事件处理的时候,ASP.NET生成的HTML代码中在FORM内的最前面会生成出两个隐藏的文本筐控件
<input type="hidden" name="__EVENTTARGET"> 
<input type="hidden" name="__EVENTARGUMENT">
并生成一段JAVASCRIPT代码
<script language="javascript">
<!--
 function __doPostBack(eventTarget, eventArgument) {
  var theform;
  if (window.navigator.appName.toLowerCase().indexOf("netscape") > -1) {
   theform = document.forms["Form1"];
  }
  else {
   theform = document.Form1;
  }
  theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
  theform.__EVENTARGUMENT.value = eventArgument;
  theform.submit();
 }
// -->
</script>图片

而后在每一个加有事件处理的控件的事件属性中都加上了__doPostBack('控件ID','参数值')这个JAVASCRIPT方法,__doPostBack这个JAVASCRIPT处理方法的做用就是将调用这个方法的控件ID记录下来,若是是在模板类型的控件中还须要一些组合转换,而后记录执行参数。最后,将这两个值分别赋给在FORM内最前面的那两个隐藏文本筐中,最后,执行FORM的SUBMIT方法将页面提交。ip

页面提交后,ASP.NET会首先检查两个隐藏表单中的值,而后根据这两个值首先执行控件中的处理方法,而后控件内部的处理再将事件委托给页面的相关事件进行处理。开发

这样ASP.NET就完成了经过用户动做触发关联事件处理程序的过程。

相关文章
相关标签/搜索