这里需要提一下的是, asp.net 编程提供了服务端控件和客户端控件的说法,其实还是脱离不了 HTML 的本质,客户端和服务端需要交互必须要提交,提交有两种方式 get post get 就是通过向服务端发送连接地址,服务端通过地址的参数来获得信息的,一般这些参数都是明文,能在浏览器地址栏看到 。而 post 是通过表单的 input 等元素提交到服务端的页面的,这些数据一般是看不到的 asp.net 的服务端控件其实就是对一般的 HTML 控件做了个包装,大体是通过隐藏控件提供控制的参数的。  
     
这里介绍一个常用的函数 _doPostBack ,这个函数如果是 ASP.Net render 出来的页面就是自动产生这个函数 ,比如有带 autopostback 属性的控件,且其属性为 true 的页面,带编辑列的 datagrid 页面。 __doPostBack 是通过 __EVENTTARGET  __EVENTARGUMENT 两个隐藏控件向服务端发送控制信息的。 __EVENTTARGET 为要调用控件的名称,如果要调用的控件是子控件,用 ''$' ':' 分割父控件 : 子控件, __EVENTARGUMENT 是调用事件时的参数。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

下面演示下如何调用后台事件:  
1.
新建工程  
2.
拖入一个服务端 Button1 ,一个 DropDownList1 和一个客户端 Button 
3.
设置 DropDownList1 AutoPostBack 属性为 True Button1 Visible False 
4.
双击 Button1 ,在事件里写下 Response.Write("hello:" ); 
5.
页面的 HTML 里找到客户端 Button ,写入 οnclick="__doPostBack('Button1' '')" 
6.
编译,运行,点击 Button 是不是出现了 "Hello" 
7.
查看源代码,发现里面多了下面行  

 

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /> <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>


以及两个隐藏控件  

<input type="hidden" name="__EVENTTARGET" value="" /> 
<input type="hidden" name="__EVENTARGUMENT" value="" />


     
值得注意的是, _doPostPack 的第一个参数是大小写不敏感的 。细心的人会发现,在 __doPostBack 里,提交调用的是 theform.submit() ,这样就导致对 Form onsubmit 事件校验失效了,幸好这个问题在 asp.net 2.0 已经修复了。这里提供一个替换的解决办法, Form 的最下面插入下面的代码,这段代码在保证不管是不是 render 出来的页面均有效  

      submit提交是不会触发onsubmit事件的,onsubmit是用submit按钮提交才触发 
      <form action="bb.asp" name="aa" οnsubmit="alert('aa')"> 
      </form> 
      <SCRIPT LANGUAGE="JavaScript"> 
      <!-- 
           aa.submit(); 
      //--> 
      </SCRIPT>
 

<script language="javascript">
<!--
    function __doPostBack_Ex(eventTarget
 eventArgument) 
    {
        var theform;
        if (window.navigator.appName.toLowerCase().indexOf("netscape") > -1) {
            theform = document.forms[0];
        }

        else {
            theform = document.forms[0];
        }


        if(!theform.__EVENTTARGET)
        {            
            theform.appendChild(document.createElement("<input type='hidden' name='__EVENTTARGET'>"));
        }

        
        if(!theform.__EVENTARGUMENT)
        {            
            theform.appendChild(document.createElement("<input type='hidden' name='__EVENTARGUMENT'>"));                        
        }

        
        theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
        theform.__EVENTARGUMENT.value = eventArgument;
        if ((typeof(theform.onsubmit) == "function")) 
        {
            if(theform.onsubmit()!=false)
            {
                theform.submit();    
            }

        }

        else
        {            
            theform.submit();    
        }

        
        function __doPostBack(eventTarget
 eventArgument)
        {
            __doPostBack_Ex(eventTarget
 eventArgument);
        }


    }
// -->
</script>