FineUI 官方论坛

标题: 【建议作者下版本可以加上】ExtAspNet IE6 上传出错的解决 [打印本页]

作者: 松松工作室    时间: 2012-5-18 22:15
标题: 【建议作者下版本可以加上】ExtAspNet IE6 上传出错的解决
修改 Business/ResourceManager/ResponseFilter.cs
将 Close()方法中的
            // 文件上传,此时应该对返回的数据进行编码,因为ExtJs会将返回的数据放在<pre></pre>中,导致自定编码
            if (HttpContext.Current.Request.ContentType.Contains("multipart/form-data"))
            {
                // HttpUtility.UrlEncode 在 Encode 的时候, 将空格转换成加号,而客户端的 encodeURIComponent 则是将空格转换为 %20
                responseText = HttpUtility.UrlEncode(responseText);
                responseText = responseText.Replace("+", "%20");
            }
修改为
            // 文件上传,此时应该对返回的数据进行编码,因为ExtJs会将返回的数据放在<pre></pre>中,导致自定编码
            if (HttpContext.Current.Request.ContentType.Contains("multipart/form-data"))
            {
                // HttpUtility.UrlEncode 在 Encode 的时候, 将空格转换成加号,而客户端的 encodeURIComponent 则是将空格转换为 %20
                responseText = HttpUtility.UrlEncode(responseText);
                responseText = responseText.Replace("+", "%20");
                responseText = "<pre>" + responseText + "</pre>";
            }
其中红色代码行为新添加的。
在IE6上出错的原因是,上传事件触发后,页面会接收返回结果,,ResourceManager在执行Page_PreRenderComplete的时候HttpContext.Current.Response.ContentType = "text/plain";这句将返回内容解析为源代码并由X.ajax.js中的new Function(scripts)();解析成JS代码,而在IE6上,返回结果会因为格式错误而出错,导致new Function(scripts)();时出错。
该解决方案应该算是一种技巧的解决方式,因为有上传控件时,本身Ext就会在返回结果中添加<pre>标记,程序在执行过程中会删除此标记。在修改上坚持尽量少的更改。
以上解决方案已在实际项目中验证通过,没有ie6的童鞋可以安装IETester进行调试。

作者: swtseaman    时间: 2012-5-18 22:33
感谢分享!
作者: 松松工作室    时间: 2012-5-18 22:41
swtseaman 发表于 2012-5-18 22:33
感谢分享!

由于我们的项目对浏览器的兼容性要求比较高,以后我会及时发现问题,如果能解决的话一定贴上来大家分享。
作者: support    时间: 2012-5-19 14:10
刚才用IETester测试了一下,在IE6下上传没问题:
[attach]513[/attach]

你用的是啥版本?


作者: 松松工作室    时间: 2012-5-20 19:47
本帖最后由 松松工作室 于 2012-5-20 19:54 编辑

恩?咋你那没出错呢?
[attach]519[/attach]
[attach]520[/attach]
在上传成功后返回的data.responseText中的内容是
<TABLE width=400>
<P style="FONT: 13pt/15pt verdana">无法显示 XML 页。
<P style="FONT: 8pt/11pt verdana">无法查看使用 样式表的 XML 输入。请更正错误然后单击 <A href="javascript:location.reload()" target=_self>刷新</A> 按钮,或稍后重试。
<HR>

<P style="FONT: bold 8pt/11pt verdana">文档的顶层无效。处理资源 'http://localhost:4765/form/fileupload.aspx' 时出错。第 1 行,位置: 1 </P><PRE style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; LINE-HEIGHT: 12pt; FONT-STYLE: normal; FONT-VARIANT: normal"><FONT color=blue>X.enable('SimpleForm1_btnSubmit')%3bvar%20x0%3dX('SimpleForm1_tbxUseraName')%2cx1%3dX('labResult')%3bX.state(x0%2c%7b%22Text...</FONT></PRE></P>
<TBODY></TBODY></TABLE>
所以后面就没法解析了,我用的IETester 0.4.11
单位的机子上装的系统自带的IE6也出错

作者: support    时间: 2012-5-21 08:08
松松工作室 发表于 2012-5-20 19:47
恩?咋你那没出错呢?



你用的extaspnet是啥版本?
作者: 松松工作室    时间: 2012-5-21 09:37
support 发表于 2012-5-21 08:08
你用的extaspnet是啥版本?

ExtAspNet 3.1.5




欢迎光临 FineUI 官方论坛 (https://www.fineui.com/bbs/) Powered by Discuz! X3.4