让UpdatePanel支持文件上传(4):数据传输与解析机制

现在就要开始整个项目中最有技巧的部分了。如果我们的组件需要在多种浏览器中正常的运行,我们必须好好考虑一下发送和解析数据的方式。如果我们把这部分的机制完全交给ASP.NET AJAX原有的行为来执行,则会遇到问题。下面的代码片断就是IE 7和FireFox在收到服务器端的数据之后,iframe中的DOM结构:

<html><head>head><body><pre>33|updatePanel|ctl00_Main_UpdatePanel1|...pre>body>html>

很显然,这段代码的意图是为了在页面中直接显示服务器端发送过来的数据。在这种情况下,我们就可以通过“

”元素的innertText属性(IE 7)或者textContent属性(FireFox)来直接获得这段文字。不幸的是,IE6的行为非常奇怪,与前两者可谓大相径庭。IE 6会把这段文字按照XML来解析,接着很自然的显示出错误信息,告诉我们这段文本不是一个有效的XML文档。这非常不合理,因为Response的“Content-Type”是“text/plain”而不是“text/xml”。这是我们要兼容多个浏览器时最头疼的情况。

还记得我们在向客户段输出真实的数据前后都调用了WriteScriptBlock方法吗?下面就是这个方法的实现:

internal static class AjaxFileUploadUtility
{
    internal static void WriteScriptBlock(HttpResponse response, bool begin)
    {
        string scriptBegin = 
            "";

        response.Write(begin ? scriptBegin : scriptEnd);
    }
}

IE 6和IE 7会将使用

你可能感兴趣的:(让UpdatePanel支持文件上传(4):数据传输与解析机制)