材料:vs2010,项目源文件
操作:
①在2010上装NuGet
工具》扩展管理器》在线安装NuGet程序包
②输入命令:"Install-Package App_BrowsersUpdate", 然后回车,稍等片刻
③修改 App_Browsers》ie.browser内容
可以添加:
<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>
以上方法治标不治本!
借阅:
以前我也没注意到,直到有次公司新配了台机器做测试服务器,在测试过程中意外发现凡是涉及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>
可为什么会不生成_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>
编译发布即可。
参考文章:http://blog.csdn.net/smeyou/article/details/9033663
http://www.ablanxue.com/prone_7061_1.html
http://support.microsoft.com/kb/2600100/zh-cn