一次关于“_doPostBack 未定义”的调试

  今天在调试程序的时候,发现了一个以前未遇到的错误:点击服务端LinkButton报“__doPostBack未定义”。

  LinkButton的定义:<asp:LinkButton ID="lbtnCacncel" target="_top" runat="server" class="logout" οnclick="lbtnCacncel_Click">退出</asp:LinkButton>

  生成的html是:<a id="lbtnCacncel" class="logout" target="_top" href="javascript:__doPostBack(&#39;lbtnCacncel&#39;,&#39;&#39;)">退出</a>

  于是google了一下,找到了一些资料:http://blogs.msdn.com/b/scott_hanselman/archive/2011/10/28/asp-net-ie10-dopostback-javascript-ff5.aspx,说原因是:ASP.NET无法检测IE10,导致_doPostBack未定义,可我用的浏览器不是ie10啊,怎么也会出现这个问题呢?

  我尝试加了一个Button,运行,执行同样的代码,结果没有报错!  

  我又加了个一个<a href="javascript:__doPostBack('','')">退出</a>,运行,点击连接,没有报错!啊?这是怎么回事儿?这说明__doPostBack这个方法定义了啊!,难道真是浏览器的原因?

  于是我就尝试了一下上面所说的第二种解决方法:给需要的项目添加浏览器版本文件,安装完之后,浏览,点击,依然报“__doPostBack未定义”。

  好郁闷啊!

  后来我无意间把target="_top"去掉了,然后浏览的时候,意外的发现不再报错了!哎?难道是这句话导致的“__doPostBack未定义”?

  静下心来好好的分析一下:target="_top",意思是在整个窗口中打开被链接文档。照这样的分析,难道_doPostBack这个函数也会在整个窗口中,也就是父窗口中执行!

  为了证实自己的猜测,我在父窗口增加了一个js函数

function xx(){

  alert('123');

}

  然后再当前页面里增加了一个链接<a href="javascript:xx()" target="_top">执行父窗口方法</a>,运行,点击链接,果然弹出了对话框!

  分析到这里,我恍然大悟,原来这个错误的根本原因是我当前页面被嵌套在一个Iframe里面了,当执行这个LinkButton这个按钮的时候,实际上时在父窗口中执行的_PostBack这个函数,而父窗口中又没有生成这个函数,所以会出现错误!

  做开发这么长时间了,我只是知道target="_top",会在整个窗口中打开被链接文档,没想到同样可以在父窗口中执行父窗口中定义的js函数,唉,看来这些细节真是得多关注,多记录啊!

转载于:https://www.cnblogs.com/Geodon/archive/2013/04/05/3000833.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值