【问题标题】:IE10 SCRIPT5009: '__doPostBack' is undefinedIE10 SCRIPT5009:“__doPostBack”未定义
【发布时间】:2013-02-22 19:04:20
【问题描述】:

我在 IE10 上使用 ASP.NET 控件时遇到问题,需要 JavaScript 回发 [如链接按钮]。

它在 IE9 版本以及 IE10 兼容模式下都能正常工作。但是在 IE10 标准模式下,它给出了以下错误。 SCRIPT5009:“__doPostBack”未定义

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

Tried the solution, but didn't work for me

谁能建议解决这个问题?

【问题讨论】:

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


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 在哪里安装包(仅限站点修复) - 在服务器端还是在编译代码的机器上?
  • 修补程序需要安装在为网站提供服务的 Web 服务器上 - 即在您的问题中,“服务器端”而不是“编译代码的机器”。后者只是您的开发环境。
  • 还有 IE11? (修补程序不起作用)。微软让我们浪费了很多时间。是时候开始避开另一个 MS 浏览器了吗...?
  • 你好。关于框架更新解决方案,为了非常清楚,有人可以确认只需要在主机上安装 FW 4.5(特定版本,是 4.5.1 好吗?),而不是将项目本身升级到 4.5?谢谢大家
  • 在 VS2017 jQuery-ui、JQuery、MVC 中还会出现这种情况
【解决方案2】:

如果您已尝试修复,但仍然在 IE11 中看到错误,请将 .net 框架更新到 4.5 即可。

【讨论】:

    【解决方案3】:

    IE 10 有问题:

    无法识别带有_doPostBack的链接【基本见于ASP Link Button的HTML输出】

    您可以参考以下链接进行修复:

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

    【讨论】:

      【解决方案4】:

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

      DOM 中缺少这些。

      我尝试了为此列出的所有修复程序,但都没有奏效。然而,使用 jquery 和 javascript 的组合有一个不显眼的解决方案。将此添加到您的 javascript 上准备好文档,然后您就可以参加比赛了(这比在您的服务器上安装 .net 框架 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 系统的企业公共网站上工作,那么这可能只是一个更简单的解决方案,而不是可能引入因更新您的平台而产生的新错误。

      【讨论】:

      • 我收到一个“对象”未定义错误。什么会导致这种情况?我应该把它拿出来吗?
      • 当我把它拿出来时,整个页面都坏了。有什么建议吗?
      猜你喜欢
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 2016-06-26
      • 2011-09-06
      • 1970-01-01
      相关资源
      最近更新 更多