.NET在IE10下的回传BUG修复

以前我也没注意到,直到有次公司新配了台机器做测试服务器,在测试过程中意外发现凡是涉及PostBack的操作仅在IE10下都无效,其他版本浏览器都没有问题,本机调试也没有问题。

这也就是说在程序相同的情况下,架设在不同服务器会产生这样的问题,客户端的IE10产生异常。那要么是IE10有问题,要么就是IIS或Framework有问题。

这确实让人困惑,去问了万能的度娘,她给我了一篇博客,我仔细看了看,额,猜想差不多正确。在IE10下,右键查看网页源代码,果然没有_doPostBack()。因为.Net的服务器控件(例如DropDownList)回传就依赖的是这个方法来实现的,若没有这个js方法,回传肯定无动于衷啊。

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['aspnetForm'];
if (!theForm) {
    theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>]
</script>

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

可为什么会不生成_doPostBack()函数呢,这是Framework该做的事情啊!查阅微软补丁帮助文件得知,原来IE10浏览器的头文件并不是.NET Framework可识别的Mozilla/5.0 (compatible; Framework无法识别这是什么浏览器,不向其发送_doPostBack()方法,才导致了这个问题的发生。

究其原因,因为IE10是新浏览器,在设计的时候没有考虑到Framework的识别问题,属于微软内部两支团队的沟通不及时导致的BUG,然而我们的大部分人不喜欢打补丁,觉得补丁和自己毫不相干,这才会产生这样那样的奇怪问题的产生。这也就解释了为什么自己电脑做服务器时可以,服务器却不可以的问题了。

问题都找出来了,解决办法有很多,微软早已经发布了补丁(2011.8.24-8.25,当时win8 preview 未发布),补丁地址如下:

Framework2.0

http://hotfixv4.microsoft.com/.NET%20Framework%202.0%20-%20Windows%20%202000,%20Windows%202003,%20Windows%20XP%20(MSI)/sp2/DevDiv953278/30729.5725/free/437012_intl_x64_zip.exe

Framework4.0

http://hotfixv4.microsoft.com/.NET%20Framework%204.0%20-%20Windows%20XP,%20Windows%202003,%20Windows%20Vista,%20Windows%20Server%202008,%20Win7,%20Windows%20Server%202008%20R2%20(MSI)/nosp/DevDiv953277/30319.504/free/436907_intl_x64_zip.exe

 

下载补丁,安装即可。但有时会出现补丁安装不上的情况,具体原因不清楚(可能是系统安装了其他补丁导致版本差异安装不上),

另附上手动声明App_Browsers的方法避免此BUG:

在工程下添加App_Browsers文件夹,然后在下面添加名如IE10Fix.browser文件,写入:

<!--
可在 <windir>\Microsoft.NET\Framework\<ver>\CONFIG\Browsers 中找到现有的浏览器定义
-->
<browsers>
<browser refID="Default">
<capabilities>
<!-- To avoid wrong detections of e.g. IE10 -->
<capability name="cookies" value="true" />
<capability name="ecmascriptversion" value="3.0" />
</capabilities>
</browser>
</browsers>

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

编译发布即可。

参考文章:http://blog.csdn.net/smeyou/article/details/9033663

              http://www.ablanxue.com/prone_7061_1.html

              http://support.microsoft.com/kb/2600100/zh-cn

上一篇:wsl字体配置(修改注册表)


下一篇:Ubuntu 20.04安装ROS2 Galactic