一次关于“_doPostBack 未定义”的调试
2013-04-05 15:10
239 查看
今天在调试程序的时候,发现了一个以前未遇到的错误:点击服务端LinkButton报“__doPostBack未定义”。
LinkButton的定义:<asp:LinkButton ID="lbtnCacncel" target="_top" runat="server" class="logout" onclick="lbtnCacncel_Click">退出</asp:LinkButton>
生成的html是:<a id="lbtnCacncel" class="logout" target="_top" href="javascript:__doPostBack('lbtnCacncel','')">退出</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函数
然后再当前页面里增加了一个链接<a href="javascript:xx()" target="_top">执行父窗口方法</a>,运行,点击链接,果然弹出了对话框!
分析到这里,我恍然大悟,原来这个错误的根本原因是我当前页面被嵌套在一个Iframe里面了,当执行这个LinkButton这个按钮的时候,实际上时在父窗口中执行的_PostBack这个函数,而父窗口中又没有生成这个函数,所以会出现错误!
做开发这么长时间了,我只是知道target="_top",会在整个窗口中打开被链接文档,没想到同样可以在父窗口中执行父窗口中定义的js函数,唉,看来这些细节真是得多关注,多记录啊!
LinkButton的定义:<asp:LinkButton ID="lbtnCacncel" target="_top" runat="server" class="logout" onclick="lbtnCacncel_Click">退出</asp:LinkButton>
生成的html是:<a id="lbtnCacncel" class="logout" target="_top" href="javascript:__doPostBack('lbtnCacncel','')">退出</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函数,唉,看来这些细节真是得多关注,多记录啊!
相关文章推荐
- 记一次诡异的bug调试——————关于JDK1.7和JDK1.8中HashSet的hash(key)算法的区别
- 记一次错误调试,关于php命令行[php cli]
- 关于Firefox 调试 easyUI 报jquery tree方法未定义错误
- 关于gcc-1.37.1下直接编译linux-0.11内核未定义符号的解决
- 关于C#代码用F12转到定义时,总是显示从元数据的解决方法
- 关于C# wpf Frame 一次加载多个Page 的问题
- wp7 关于真机调试,部署注意事项
- 关于 iOS 程序调试 及腾讯 Bugly 的演练
- 关于使用facebook的Android调试工具Stetho时遇到的问题
- c中switch case 中关于变量定义问题
- 关于头文件变量的声明和定义
- 机器学习有很多关于核函数的说法,核函数的定义和作用是什么?
- 关于Vs 2005 中出现编译通过,但运行时出现“未使用调试信息生成二进制文件”的问题
- 关于vs2013调试的偶然错误发现与总结(vs2013的承载进程)---ShinePans
- 关于定义为volatile的变量
- 关于codeblocks的调试问题
- 关于VS 动态库和 静态调试
- 关于DefaultValue属性定义默认值(有时失效)的一点看法!
- 关于c语言定义变量
- js - 关于部分浏览器内置函数console详解(用开发调试的利器)