编辑: 应用热修复http://support.microsoft.com/kb/2600088对我无效,并且Windows 8上的IE 10正常运行。 Scott Hanselman有一篇更新的文章提供更新信息。http://www.hanselman.com/blog/IE10AndIE11AndWindows81AndDoPostBack.aspx 我将尝试这些修复并更新该问题,但似乎只存在于Windows 8.1和IE11。
在为同一个问题苦苦挣扎了几天后,我们找到了这个解决方案:
将一个新的.browser文件添加到App_Browsers文件夹中;我们将该文件命名为“IE11.browser”,如果App_Browsers文件夹不存在,则创建它。
然后,我们只需将上面链接中的内容复制到新创建的文件中,重新部署,现在就没有_doPostBack错误了。
文件的主体如下:
<browsers>
<browser id="IE11" parentID="Mozilla">
<identification>
<userAgent match="Trident\/7.0; rv:(?'version'(?'major'\d+)(\.(?'minor'\d+)?)(?'letters'\w*))(?'extra'[^)]*)" />
<userAgent nonMatch="IEMobile" />
</identification>
<capture>
<userAgent match="Trident/(?'layoutVersion'\d+)" />
</capture>
<capabilities>
<capability name="browser" value="IE" />
<capability name="layoutEngine" value="Trident" />
<capability name="layoutEngineVersion" value="${layoutVersion}" />
<capability name="extra" value="${extra}" />
<capability name="isColor" value="true" />
<capability name="letters" value="${letters}" />
<capability name="majorversion" value="${major}" />
<capability name="minorversion" value="${minor}" />
<capability name="screenBitDepth" value="8" />
<capability name="type" value="IE${major}" />
<capability name="version" value="${version}" />
</capabilities>
</browser>
<!-- Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11,0) like Gecko -->
<browser id="IE110" parentID="IE11">
<identification>
<capability name="majorversion" match="11" />
</identification>
<capabilities>
<capability name="ecmascriptversion" value="3.0" />
<capability name="jscriptversion" value="5.6" />
<capability name="javascript" value="true" />
<capability name="javascriptversion" value="1.5" />
<capability name="msdomversion" value="${majorversion}.${minorversion}" />
<capability name="w3cdomversion" value="1.0" />
<capability name="ExchangeOmaSupported" value="true" />
<capability name="activexcontrols" value="true" />
<capability name="backgroundsounds" value="true" />
<capability name="cookies" value="true" />
<capability name="frames" value="true" />
<capability name="javaapplets" value="true" />
<capability name="supportsCallback" value="true" />
<capability name="supportsFileUpload" value="true" />
<capability name="supportsMultilineTextBoxDisplay" value="true" />
<capability name="supportsMaintainScrollPositionOnPostback" value="true" />
<capability name="supportsVCard" value="true" />
<capability name="supportsXmlHttp" value="true" />
<capability name="tables" value="true" />
<capability name="supportsAccessKeyAttribute" value="true" />
<capability name="tagwriter" value="System.Web.UI.HtmlTextWriter" />
<capability name="vbscript" value="true" />
</capabilities>
</browser>
</browsers>
我们不需要将我们的 .Net 版本从 4 升级到 4.5,现在一切都能正常工作了。
希望这能帮助遇到同样烦人问题的人!
7.0; rv
更改为7.0;(.*?)rv
。 - Stryner<script runat="server">
protected override void OnInit(EventArgs e)
{
Page.ClientTarget = "uplevel";
base.OnInit(e);
}
</script>
问题在于,由于用户代理已更改,Asp.net不将IE11识别为现代浏览器,对于处于相同情况的任何人,唯一的解决方案是添加一个setTimeout。
而不是使用以下代码段
__doPostBack('ButtonPostBack', "");
setTimeout(function () { __doPostBack('ButtonPostBack', ""); }, 1);
基本上是这样的,有两个缺失的HTML隐藏元素“eventtarget”和“eventargument”,以及一个缺失的函数“__doPostBack”。
这些在DOM中缺失。
我尝试了所有列出的修复方法,但都没有起作用。然而,使用jQuery和JavaScript的组合,有一种不显眼的解决方案。在文档准备就绪时将此添加到您的JavaScript中,您就可以开始了:
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();
}
};
}
我知道安装4.5会修复一些问题,我强烈建议这样做。 但是,如果像我一样在使用内置 .net 4 的企业公共网站上工作,并且有一个 CMS 系统,则这可能是一个更简单的解决方案,而不是通过更新您的平台可能引入新错误。
对于我来说,热修复都没有起作用,也无法更新ie.browser
文件。
我使用的是Windows Server 2008 R2。
然而唯一有效的解决方案(除了升级到.net 4.5之外)是在此线程中添加@vishal建议的脚本。