博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一次关于“_doPostBack 未定义”的调试
阅读量:6656 次
发布时间:2019-06-25

本文共 1248 字,大约阅读时间需要 4 分钟。

  今天在调试程序的时候,发现了一个以前未遇到的错误:点击服务端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了一下,找到了一些资料:,说原因是: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

你可能感兴趣的文章
设计模式之模板模式
查看>>
直接插入排序
查看>>
springmvc4.x返回json数据
查看>>
日志管理-slf4j+logback
查看>>
iOS逆向之三-authorized_keys ssh登录越狱手机免验证设置
查看>>
socket 编程入门教程(二)winsock演示程序:2、TCP Server
查看>>
ARouter解析一:基本使用及页面注册源码解析
查看>>
vlc android 代码编译
查看>>
elasticsearch集群发现机制:Zen Discovery
查看>>
看这里,智和网管平台的网络拓扑功能更新啦
查看>>
Intent跳转详解
查看>>
mybatis学习笔记(6)-输入映射
查看>>
Android中Preference的使用以及监听事件分析
查看>>
Heroku error:Permission denied (publickey)
查看>>
解决linux的-bash: ./xx: Permission denied
查看>>
Laravel 第三方登陆之 Socialite Providers
查看>>
Ubuntu14.10 remove ibus 之后
查看>>
Spring第一天
查看>>
功能需求流程、流程图制作软件
查看>>
linux 下C语言线程示例 + 线程同步
查看>>