首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CrossPostback、AJAX控件和ASP.NET生成的回发用于.NET 4.5,而不是IE11中的.NET 4.0

CrossPostback、AJAX控件和ASP.NET生成的回发用于.NET 4.5,而不是IE11中的.NET 4.0
EN

Stack Overflow用户
提问于 2013-08-02 05:52:51
回答 2查看 15.3K关注 0票数 5

早些时候,我已经发布并回答了这个问题。WebResource.axd not working with Internet Explorer 11

但我认为修补程序已经修复了这个问题(CrossPostback、AJAX控件和ASP.NET生成的回发不起作用),但是在QA中安装之后,它没有工作,我们意识到是.NET 4.5使事情正常工作。

我正在将.NET框架文件夹在.NET 4和.NET 4.5之间进行比较。我需要问的是,在.NET 4.5中真正能解决IE11问题的是什么。

IE11中的主要更改是用户代理字符串。.NET 4.5中的特定修复可以解决ASP.NET 4.0和IE11之间的差异。

如果在.NET 4.0中安装了一个安全/热修复程序,这些文件可能会被覆盖,手动合并这些差异可能没有什么帮助。

另一个优点,问题是IE 11在Windows 7,8,8.1任何帮助或建议。

UPDATE:我们尝试只将.NET 4.5的浏览器定义注册到.NET 4.0中,但问题仍然存在,除了定义之外,还有一些库可以在IE11中工作。

EN

回答 2

Stack Overflow用户

发布于 2013-10-05 22:46:08

我们也遇到了一个类似的问题,DropDownList的自动回发不再适用于较新版本的IE。我们首先使用IE10注意到它,并跟踪它到许多人都知道的浏览器定义错误,这是详细的here,以及其他地方。

对于这个特定的应用程序,以及它的不同环境运行/运行的一组框,升级到4.5不是一个短期的选择。更重要的是,当我们试图安装它时,上面的文章详细介绍了机器范围的修复。然而,网站范围内的修复确实做到了这一点。

一到两周后,有人碰巧用IE11预览访问了这个网站,问题再次出现了。我们做了更多的研究,并发现浏览器定义的"IE10Plus“来自站点范围的修复--实际上解决了IE10问题--对IE11不起作用。为了识别IE10,添加了一个主要版本的regex匹配- "\d{2,}“-它匹配两位数(相对于以前沿着"^9$”方向进行的匹配--匹配"9")和IE10现在工作了。问题是,IE10Plus定义(以及它面前的每个IE定义)最终源自"IE“定义,而且该定义还要求UA字符串中包含"MSIE”(除其他外),而且“IE11”不再是UA字符串的一部分。

"IE10Plus“实际上应该被称为"IE10”。

考虑到我们不能在短期内升级到4.5,我们必须找到另一个解决方案。我们想到的是创建我们自己的IE11浏览器定义。除了我们在IE10中看到的功能之外,我们无法定义任何功能,但这是非常接近的,至少它可以识别浏览器(而不是像正在发生的那样降低功能)。

人们会告诉你不要这样做,但是对于一些人(比如我们)来说,它确实提供了一个临时的解决方案,直到最终的解决方案出现。

我不知道4.5应该用什么方法来解决这个问题。我看过浏览器定义文件,我看不到它们识别IE11的方法(在它的UA字符串中没有"MSIE“),但是可能在某个DLL中隐藏了一些额外的修复。

无论如何,这是我们创建的定义,对我们来说,它立即解决了问题。

在您的项目中,添加(或创建) App_Browsers/ie.browser,如下所示:

代码语言:javascript
复制
<!-- Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko -->
<browser id="IE11Preview" parentID="Mozilla">
    <identification>
        <userAgent match="Trident/(?'layoutVersion'\d+).*rv:(?'revision'(?'major'\d+)(\.(?'minor'\d+)?))" />
        <userAgent nonMatch="MSIE" />
    </identification>

    <capabilities>
        <capability name="browser"              value="IE" />
        <capability name="layoutEngine"         value="Trident" />
        <capability name="layoutEngineVersion"  value="${layoutVersion}" />
        <capability name="isColor"              value="true" />
        <capability name="screenBitDepth"       value="8" />
        <capability name="ecmascriptversion"    value="3.0" />
        <capability name="jscriptversion"       value="6.0" />
        <capability name="javascript"           value="true" />
        <capability name="javascriptversion"    value="1.5" />
        <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" />
        <capability name="revmajor"             value="${major}" />
        <capability name="revminor"             value="${minor}" />
    </capabilities>
</browser>

如果要添加到现有文件中,请查找id="IE10Plus“--您可能希望将其更改为id="IE10”,因为"Plus“部分不再准确。

就像我说过的,如果你能达到4.5,它就能解决你的问题--太好了。如果你不能,或者它不能,这可能会让你坚持到你可以(或直到其他修复出现)。

票数 14
EN

Stack Overflow用户

发布于 2015-01-30 10:30:02

嗨,试试下面的脚本,它可能对你有帮助。

代码语言:javascript
复制
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance()._origOnFormActiveElement = Sys.WebForms.PageRequestManager.getInstance()._onFormElementActive;
Sys.WebForms.PageRequestManager.getInstance()._onFormElementActive = function (element, offsetX, offsetY) {
if (element.tagName.toUpperCase() === 'INPUT' && element.type === 'image') {
offsetX = Math.floor(offsetX);
offsetY = Math.floor(offsetY);
}
this._origOnFormActiveElement(element, offsetX, offsetY);
};
</script>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18009636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档