[原文发表地址] Bug and Fix: ASP.NET fails to detect IE10 causing _doPostBack is undefined JavaScript error or maintain FF5 scrollbar position
[原文发表时间] 2009-05-20 01:41
浏览器版本号继续升级过程中。IE9诞生了,IE10 也即将问世,火狐5和6已经发布了,而7和8也快出现了,Opera已经到了11,Chrome还在继续,我也不知道,应该总在14和50之间吧。不管怎样,不出意外版本号应该都会达到99。
在跟随.NET 2.0和.NET 4一起发布的浏览器定义文件中有一个错误,也就是它们保存相当一部分浏览器版本的定义。但是浏览器的有些版本(比如IE10)不再在这个范围之内。因此,ASP.NET把它们看做是未知的浏览器,默认降级处理,这样就会给用户带来不便,比如不支持JavaScript特性。
如果你想亲自看看,那就创建一个全新的空白的网站(可以在Visual Studio 2010中试一下),添加一个需要JavaScript回调的控件(例如:<asp:LinkButton>),然后用IE9来运行站点(这是可行的)。再用IE10来运行(这就不行了)。查看一下页面源代码,比较一下发送到两个版本的浏览器的HTML和JavaScript。
火狐5也遇到上述相似的问题,也就是无法检测在浏览器中使用JavaScript重定位滚动条。这与为Web Form 页面而设的MaintainScrollbackPositionOnPostBack属性不符。
这些“无法检测”错误在ASP.NET 2和ASP.NET4中都影响了Web Form页面。如果你使用的是ASP.NET Web页面,或者是ASP.NET MVC,但没有用浏览器对象去检测JavaScript支持,那你就不再受影响的范围内。
修复
有两种修复这个错误的方法:一个就是整体修复,另一个就是单独修复每个站点。
整体修复
我们正准备发布一个Hotfix来修复这些问题,你可以通过KB文章来获取。这些有修复 KB在一周内就会公布了。它们可以再一部机器上永久解决所有页面浏览器检测问题。这些修复也会在以后版本的framework中运用,最终会成为一个Windows更新。
· .NET 4 - http://support.microsoft.com/kb/2600088
·
· .NET 2.0 - http://support.microsoft.com/kb/2600100
修复所做的就是更新IE.浏览器和火狐浏览器的文件(路径:\Windows\Microsoft.NET\Framework\<version>\Config\Browsers), 加上最新和未来已定义的版本号。不会影响其他任何东西。
单站点修复
如果你无法访问整部机器,或者只想更新单一的项目,那就通过NuGet安装App_BrowsersUpdate包吧。然后你在方案浏览器(Solution Explorer)中的页面结构就会如右图所示。注意NuGet使用的是.NET 4,所以对于那些只有.NET 2的系统来说,你就还要获取 ZIP文件,手动将新浏览器文件添加至App_Browsers目录。
· .NET 4 浏览器更新 NuGet 包 - http://nuget.org/List/Packages/App_BrowsersUpdate
· 安装包 App_BrowsersUpdate
· .NET 2.0 浏览器更新 NuGet 包 - http://nuget.org/List/Packages/App_BrowsersUpdate.net20
· 安装包 App_BrowsersUpdate.net20
· 注意NuGet是VS2010特定版的,所以如果你没有nuget.exe和.NET 4,你也可以手动地从这个zip文件中直接复制.NET 2的更新浏览器文件到~\App_Browsers.
要修复这个问题更新整部机器更可取。
总结
· ASP.NET 可能无法辨识出一些浏览器的最新版本,还会经常把它们看做是低级的浏览器。(也就是: 不支持JavaScript。)
· 修复是指更新浏览器定义文件。
· 你可以安装整体修复或者单一修复某些项目。
· Hotfix会在几周内问世。KB文章会届时提供下载链接。
· 这些文件也会是之后.NET 4修复的一部分,预期也会在2012年1月通过Windows更新推送给用户。
· 下一版本的.NET framework会包括所有的更新文件。
我上传了已经更新的firefox.browser和ie.browser文件,,这些文件预计会在下一版本的ASP.NET中添加。文件和源代码在我的BitBucket repo中。如果你想了解详情,可以去看看。
相关推荐
.Net4.0下ASP.NET在IE10以上版本访问的时候,遇到分页或者控件回发的时候会提示doPostBack未定义,这个补丁是用来在服务器端修正这个问题,安装完需要重启。如不想在服务器修正,可以看 ...
针对.Net4.0的网站在IE10、IE11出现“__doPostBack未定义”的解决办法
我用在2008r2 上没用,后来用的App_Browsers文件夹的方式解决的,这个应该针对有一些也应该有用。 网上方法三的文件,直接放到网站根目录下就可以了。...我用于主要是翻页控件和报表控件在ie10下无法使用。
.Net4.0下ASP.NET在IE10以上版本访问的时候,遇到分页或者控件回发的时候会提示doPostBack未定义,这个补丁是用来在服务器端修正这个问题,安装完需要重启。如不想在服务器修正,可以看...
这可能导致ASP.NET将这些现代浏览器错误地识别为不支持JavaScript的低版本浏览器,因此`__doPostBack`函数在这些浏览器中无法正常工作。 解决这个问题的步骤如下: 1. **检查.NET Framework更新**:首先,确保...
文件先解到服务器,再安装,安装完毕后需重启服务器。
先解压缩到服务器,然后安装,安装完毕需重启服务器。
.Net4.0下ASP.NET在IE10以上版本访问的时候,遇到分页或者控件回发的时候会提示doPostBack未定义,这个补丁是用来在服务器端修正这个问题,安装完需要重启。如不想在服务器修正,可以看...
文件先解压到服务器,然后再安装,安装完毕后需要重新启动服务器。
在IE11中遇到“__doPostBack”未定义的问题,可能是由于浏览器的JavaScript支持或者ASP.NET的配置问题导致的。 为了解决这个问题,我们可以尝试以下几种方法: 1. **启用兼容性视图**:IE11有一个“兼容性视图”...
.Net4.0下ASP.NET在IE10以上版本访问的时候,遇到分页或者控件回发的时候会提示doPostBack未定义,这个补丁是用来在服务器端修正这个问题,安装完需要重启。如不想在服务器修正,可以看...
在ASP.NET开发中,`doPostBack`是一个非常关键的JavaScript函数,它主要用于触发服务器端的回发事件。本文将深入探讨`doPostBack`的工作原理及其在弹出窗体(弹框)与父窗体间传递数据的应用。 首先,让我们了解`...
__doPostBack 函数是 ASP.NET 编程中的一种重要机制,它可以将客户端事件信息传递给服务器端,同时也可以控制服务器端的行为。但是,在使用 __doPostBack 函数时,需要注意一些问题,如提交调用的是 theform.submit...
由于Button和ImageButton控件在触发PostBack时不通过__doPostBack函数,因此通过__EVENTTARGET和__EVENTARGUMENT无法直接获取这些控件的ID和参数值。为了解决这个问题,开发者通常需要使用其他逻辑来判断触发...
本文将深入探讨ASP.NET中前台JavaScript与后台代码调用的技术细节,包括IPostBackEventHandler接口的使用、ClientScript对象的功能以及如何通过__doPostBack函数实现前后端的通信。 ### ASP.NET中前后端通信的基础 ...
在.NET框架中,`doPostBack`是一个非常关键的函数,主要用在ASP.NET网页应用程序中,用于触发服务器端事件。这个函数是隐藏的,并且在客户端JavaScript中被调用,通常通过HTML控件的`onclick`事件或者自定义的...
在某些情况下,由于IE11的更新或安全策略,可能导致此功能无法正常工作。 微软通常会发布补丁来解决这些兼容性问题,以确保用户在最新浏览器环境下依然可以正常使用基于.NET Framework开发的Web应用程序。"Fix_...
在ASP.NET中,开发Web应用程序时,我们可能会遇到需要监听用户键盘输入的情况,例如实现特定按键触发特定功能。本文将详细讲解如何在ASP.NET中处理键盘事件,特别是使用`keycode`来识别用户按下的键。 一、键盘事件...
在Asp.net中,触发服务端事件是网页与服务器间通信的关键部分,使得开发者能够实现动态交互的功能。根据描述和部分内容,我们可以详细分析两种不同类型的客户端事件触发方式: 1. WebControls中的Button和...
在ASP.NET中,鼠标点击事件是网页交互的重要组成部分,它允许开发者捕捉用户的鼠标操作并执行相应的代码逻辑。这里我们主要关注的是`onmousedown`事件,它是HTML和JavaScript中的一个事件,但同样可以在ASP.NET中...