最近碰到一个很奇怪的问题!
新发布一个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" id="__EVENTTARGET" value="" /><input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />');}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(); } };}
新闻热点
疑难解答