IE10 SCRIPT5009:'__ doPostBack'未定义

时间:2013-03-07 14:22:03

标签: asp.net postback internet-explorer-10

我在使用ASP.NET控件的IE10上面临一个问题,需要JavaScript回发[比如,链接按钮]。

它正在适用于IE9版本以及IE10兼容模式。但是在IE10标准模式下,它给出了以下错误。 SCRIPT5009:'__ doPostBack'未定义

[我创建了一个带有简单asp:link按钮的演示项目,该按钮可以重定向到另一个页面。] IE10_error screen

Tried the solution, but didn't work for me

有人可以建议修复吗?

4 个答案:

答案 0 :(得分:50)

.NET 2.0和.NET 4附带的浏览器定义文件中显然存在一个错误。定义文件不支持IE10作为浏览器版本,因此默认为默认定义,不支持JavaScript。

Scott Hanselman在这里有一篇关于这个问题的非常详细的文章:http://www.hanselman.com/blog/BugAndFixASPNETFailsToDetectIE10CausingDoPostBackIsUndefinedJavaScriptErrorOrMaintainFF5ScrollbarPosition.aspx

斯科特提出了两种解决方案,第一种是推荐的解决方案:

<强> 1。机器范围的修复 在服务器上下载并安装修补程序:

<强> 2。仅限网站修复 将NuGet中的App_BrowsersUpdate软件包安装到您的网站中,以导入新的ie和firefox浏览器定义。

答案 1 :(得分:1)

如果你已经尝试过修复,但仍然在IE11中看到错误,那么将.net框架更新为4.5就可以了。

答案 2 :(得分:0)

IE 10存在问题:

它无法识别带有_doPostBack的链接[基本上可以在ASP链接按钮的HTML输出中看到]

您可以参考以下链接获取修复:

http://ronniediaz.com/2013/02/07/ie10-imagebutton-_dopostback-undefined-bug-with-update-panel-script-manager/

答案 3 :(得分:0)

基本上发生了什么是有2个缺少html隐藏元素“eventtarget” 和“eventargument”,以及缺少的函数“__doPostBack”。

DOM中缺少这些内容。

我尝试了为此列出的所有修复程序,但都没有。但是,使用jquery和javascript的组合有一个不显眼的解决方案。将此文件添加到您的javascript文档准备就绪,然后您即可参加比赛(这比在您的服务器上安装.net framework 4.5要快得多,不过如果你可以安装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) { 
    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();
    }
  };
}

据我所知,有些人说安装4.5修复此问题。我肯定会推荐。但是,如果您像我一样在.net 4中使用cms系统在企业面向公众的网站上工作,这可能只是一个更简单的解决方案,而不是可能引入通过更新平台而产生的新错误。