在IE11中,Sys.WebForms.PageRequestManager是未定义的错误,在IE10及以下版本中正常工作

时间:2013-11-23 16:25:31

标签: javascript asp.net .net internet-explorer

我的客户已将其浏览器从IE10更新为IE11。 我在页面刷新时遇到错误 Sys.WebForms.PageRequestManager未定义。

请检查我的代码

<asp:ScriptManager ID="scmMain" EnableCdn="false" runat="server" AsyncPostBackTimeout="0"
    ScriptMode="Release">
   </asp:ScriptManager>

<script type="text/javascript">
    Sys.Application.add_init(function () {
        Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(ieAjaxPageLoaded);
        Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(ieAjaxPageLoaded);
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(ieAjaxEndRequest);
        Sys.Application.add_load(NeoSpin_PageLoad);
    });

    function header_onclick() {
    }
    function End(sender, args) { }
</script>

这适用于IE10及以下

我已尝试过以下链接 - 但没有帮助 -

'Sys.WebForms.PageRequestManager' is null or not an object

Microsoft JScript runtime error: 'Sys' is undefined

http://encosia.com/updated-your-webconfig-but-sys-is-still-undefined/

http://www.codeproject.com/Questions/543002/Unableplustoplusgetpluspropertyplus-27PageRequestM

由于 法赫德穆拉吉

5 个答案:

答案 0 :(得分:2)

所以我没有适合你的解决方案,但根据我对服务器的经验与本地开发机器相比,我认为这是正在进行的。看起来您正在使用ASP.NET控件工具包,这种工具包在几年前就被弃用了,现在可以在Codeplex上作为开源项目使用。它主要是从服务器端驱动的,我打赌它正在做一些糟糕的浏览器嗅探,因为这是当时常见的事情。它应该做的是特征检测。

问题从何而来?所以我的本地开发机器将IE 11报告为majorVersion == 11.我的服务器将majorVersion报告为7.所以确实需要一个补丁来修复服务器,但我不确定它是否存在。另一个选择是将控制工具包修改为NOT浏览器嗅探和功能检测。至少可以说,这是一项非常艰巨的任务。

虽然这个话题只值2美分。这是一个真正的问题,因为我猜这个问题实际上可能会让你的公司或客户实际更新他们的系统,最终会赶上他们并导致他们出现重大问题,比如在4月份之前不升级XP机器会导致很多公司

抱歉,我没有适合您的解决方案,但这非常有趣,因为我正在研究需要解决的问题,以帮助公司摆脱过时的平台,如旧的IE&amp; XP现在。

答案 1 :(得分:2)

问题在于IE 11发送的userAgent字符串,其中Dot Net 4.0框架或以下不能识别为Internet Explorer。 您可以通过将服务器升级到Dot Net 4.5或更新来解决此问题 您可以在App_Browsers文件夹中的Web应用程序中添加一个ie.Browser文件,其中包含以下条目

<browser id="InternetExplorer" parentID="Mozilla">
    <identification>
        <userAgent match="Trident/(?'layoutVersion'[7-9]|0*[1-9]\d+)(\.\d+)?;(.*;)?\s*rv:(?'version'(?'major'\d+)(\.(?'minor'\d+)))" />
        <userAgent nonMatch="IEMobile" />
        <userAgent nonMatch="MSIE " />
    </identification>

    <capabilities>
        <capability name="browser"              value="InternetExplorer" />
        <capability name="version"              value="${version}" />
        <capability name="majorversion"         value="${major}" />
        <capability name="minorversion"         value="${minor}" />
        <capability name="layoutEngine"         value="Trident" />
        <capability name="layoutEngineVersion"  value="${layoutVersion}" />
        <capability name="type"                 value="InternetExplorer${major}" />
    </capabilities>
</browser>

答案 2 :(得分:0)

这似乎是一个已知问题,因为框架无法将IE 11检测为Microsoft Internet Explorer。您可以从以下链接下载补丁以解决问题。

Click here to Download patch from Microsoft site

Or following:

<head>
<meta http-equiv="X-UA-Compatible" content="IE=10" />
</head>

答案 3 :(得分:0)

终于找到了解决这个问题的方法。我将.NET版本从4.0升级到4.5。 我不知道它内部是如何运作的。

由于

答案 4 :(得分:0)

来自Liran的引用配置文件将起作用,但前提是Mozilla已启用javascript。 .Net 4.0没有为Mozilla启用javascript。这来自具有.Net 4.5的服务器的default.browser文件:

<browser id="Mozilla" parentID="Default">
    <identification>
        <userAgent match="Mozilla" />
    </identification>
    <capture>
    </capture>
    <capabilities>
        <capability name="javascript" value="true" />
  • 然后运行aspnet_regbrowsers.exe,因为浏览器文件实际上没有做任何事情,直到你运行它。
  • 如果您在项目中使用App_Browsers文件夹,则还需要删除临时Internet文件(我的文件位于C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files但是你的结果可能会有所不同)。您必须删除它,因为ASPNet需要重新生成它从App_Browsers / *。浏览器文件生成的动态DLL。

当然最简单的方法就是安装.Net 4.5。这个答案仅适用于因某些原因不能的人。