__doPostBack的了解与备注

本文详细介绍了ASP.NET中__doPostBack函数的工作原理及其应用场景,包括如何通过该函数触发服务器端事件、如何传递参数到服务器端以及如何在服务器端判断按钮点击等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

__doPostBack是通过__EVENTTARGET与__EVENTARGUMENT

__EVENTTARGET是目标控件

__EVENTTARGUMENT是给传参数

此事件对于使用Visble的控件无效,但可以使用Style="Display:none"来实现隐藏

如在母版页的子页面进行__doPostBack时需要使用如下操作:

                        var obj = document.getElementById("<%= btnRefresh.ClientID%>");
                        __doPostBack(obj.name, '');


转载原址如下: http://www.cnblogs.com/ttc/archive/2011/03/25/1995651.html

一、 在后台判断哪个按钮点击了。

前台代码:

<button type="button" id="Button1" οnclick="<strong><span style="color:#3333FF;">__doPostBack('btnReturn','1')</span></strong>">查询</button>

注意 onclick ="__doPostBack('btnReturn','1')"

第一个参数表示按钮ID,第二参数随便写的,为的就是在后台确定按钮是否被点击了。

后台代码:

string controlName = Request.Params.Get( "__EVENTTARGET" );
string eventArgument = Request.Params.Get( "__EVENTARGUMENT" );

// 确定按钮事件
if( controlName == "btnConfirm" && eventArgument == "2" )
{
  btnConfirm_Click( sender, e );
}

// 查询按钮事件
if( controlName == "btnReturn" && eventArgument == "1" )
{
  btnReturn_Click( sender, e );
}

二、应用二,利用eventArgument 向后台传递参数。

前台JS代码:

__doPostBack('btnDelete',delStr);

delStr就是向后台传递的一个字符串。

 后台代码:

string eventArgument = Request.Params.Get( "__EVENTARGUMENT" );
string[] delStr = eventArgument.Split( ',' );


其它链接: http://blog.youkuaiyun.com/prayerlee/article/details/4516138

下面演示下如何调用后台事件:

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.查看源代码,发现里面多了下面行

<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" value="" />
 <input type="hidden" value="" />

细 心的人会发现,在__doPostBack里,提交调用的是theform.submit(),这样就导致对Form的onsubmit事件校验失效了,

幸好这个问题在asp.net 2.0已经修复了。这里提供一个替换的解决办法,在Form的最下面插入下面的代码,这段代码在保证不管是不是render出来的页面均有效


    <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>


其它链接: http://www.cnblogs.com/hjf1223/archive/2006/07/05/443761.html此链接有源码下载

链接地址:

http://itworktor.blog.163.com/blog/static/175203029201103071652517/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值