ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ASP.NET前台使用__doPostBack函数调用后台事件

ASP.NET前台使用__doPostBack函数调用后台事件

原创 Linux操作系统 作者:kevin_god 时间:2009-07-17 11:04:22 0 删除 编辑

ASP.NET前台使用__doPostBack函数调用后台事件

这里需要提一下的是,asp.net编 程提供了服务端控件和客户端控件的说法,其实还是脱离不了HTML的本质,客户端和服务端需要交互必须要提交,提交有两种方式get和post,get就 是通过向服务端发送连接地址,服务端通过地址的参数来获得信息的,一般这些参数都是明文,能在浏览器地址栏看到。而post是通过表单的input等元素 提交到服务端的页面的,这些数据一般是看不到的。asp.net的服务端控件其实就是对一般的HTML控件做了个包装,大体是通过隐藏控件提供控制的参数的。

这里介绍一个常用的函数_doPostBack,这个函数如果如果是ASP.Net render出来的页面就是自动产生这个函数,比如有带autopostback属性的控件,且其属性为true的页面,带列的datagrid页面。
__doPostBack 是通过__EVENTTARGET,__EVENTARGUMENT两个隐藏控件向服务端发送控制信息的,__EVENTTARGET为要调用控件的名 称,如果要调用的控件是子控件,用''$'或':'分割父控件:子控件,__EVENTARGUMENT是调用事件时的参数

页面的HTML里找到客户端Button,写入

onclick="__doPostBack('Button1','')"

<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();
    }
// -->

以及两个隐藏控件


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


<!--
    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(""));
        }

        if(!theform.__EVENTARGUMENT)
        {           
            theform.appendChild(document.createElement(""));                       
        }

        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);
        }
    }
// -->

示例:

前台:

class="tb_linkbtn" id="lbtnReturn" href="javascript.:__doPostBack('lbtnTest','')">测试

后台:

if(Request["__EVENTTARGET" ]=="lbtnTes")
{
    Response.Write("链接点击的PostBack");
}

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17140602/viewspace-609490/,如需转载,请注明出处,否则将追究法律责任。

上一篇: xml 操作
请登录后发表评论 登录
全部评论

注册时间:2008-12-26

  • 博文量
    18
  • 访问量
    37857