在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
最近碰到一个很奇怪的问题! 新发布一个ASP.NET的网站,基于.net 4.0 framework,基本没有用到什么特别新的技术,但是由于给客户预览用的服务器比较老,操作系统用的是Windows 2003,上面默认只支持IIS 6。将网站发布上去之后大部分功能都能正常运行,但是有一些操作会莫名其妙地报'__doPostBack' is undefined的脚本错误。在网上查找了一下错误产生的原因,这个是.net 4.0 framework中的一个bug,可以查看这篇文章http://www.hanselman.com/blog/BugAndFixASPNETFailsToDetectIE10CausingDoPostBackIsUndefinedJavaScriptErrorOrMaintainFF5ScrollbarPosition.aspx 部分ASP.NET的控件在postback的时候会失效,并且抛出'__doPostBack' is undefined的脚本错误,如DropDownList的SelectedIndexChanged事件触发,RadioButtonList或CheckBoxList在postback的时候,还有LinkButton等控件。该问题只会出现在比较高版本的IE浏览器中(由于我本机只有IE11,所以不确定是否较低版本的IE上也会出现该问题),FireFox和Chrome上一切运行正常。另外,在IE中将User agent string改为IE10或以下也运行正常。 尝试了以下方法均无效: 1. 重新安装.net 4.0 framework。 2. 在IIS中重新配置网站运行权限和.net设置项。 3. 清除本机所有已安装的.net framework版本然后重新安装.net 4.0 framework。 4. 排除网站代码本身产生的问题。因为除了IE,其它的浏览器均运行正常,说明代码本身没有问题,应该是服务器环境所产生的。 解决办法:
如果上述方法均不奏效,可以考虑升级IIS 6到IIS 7或IIS 8.5,或者升级.net framework到4.5或更新版本,或者为网站的所有页面加上下面的脚本: if ($('#__EVENTTARGET').length <= 0 && $('#__EVENTARGUMENT').length <= 0) { $('#YOUR_ASPNET_FORMID').prepend('<input type="hidden" name="__EVENTTARGET" >); } if (typeof __doPostBack == 'undefined') { __doPostBack = function (eventTarget, eventArgument) { object var theForm = document.forms['YOUR_ASPNET_FORMID']; if (!theForm) { theForm = document.YOUR_ASPNET_FORMID; } if (!theForm.onsubmit || (theForm.onsubmit() != false)) { theForm.__EVENTTARGET.value = eventTarget; theForm.__EVENTARGUMENT.value = eventArgument; theForm.submit(); } }; }
|
请发表评论