强制下载:“文件下载”对话框在IE6 SP1中打开两次

时间:2009-12-31 16:47:04

标签: asp.net internet-explorer-6 download

我的ASP.Net页面应该创建一个文档并强制下载(打开“文件下载”对话框)。它适用于大多数浏览器,但出于某种原因,在IE6 SP1(Windows 2000)上,“文件下载”对话框打开两次。 有什么想法吗?

我非常简单的代码(C#):

protected void bnCreateDocument_Click(object sender, EventArgs e)
{

    string documentText = GetDocumentText();


    Response.Clear();
    Response.Charset = "";
    Response.ContentType = "application/msword";

    string filename = "MyDoc.doc";
    Response.AddHeader("Content-Disposition", "attachment;filename=" + filename);

    Response.Write(documentText);
    Response.End();
    Response.Flush();
}

1 个答案:

答案 0 :(得分:0)

你的代码看起来不错,但我认为我会指出它有一些奇怪的事情。

如果您只是将文件系统中的文件提取到该字符串中,为什么不直接使用Response.WriteFile()

此外,Response.End()如果启用了缓存,则会自动调用Flush(),因此您不应该在最后调用Flush() - 最好,它应该在调用之前结束。 End()也提出ThreadAbortedException,所以如果你可以完全避免调用它,那将是理想的。如果您可以使用HttpApplication.CompleteRequest(),这是一种更好的方法。

在关闭Response对象时,有一些非常棘手和模糊的错误需要处理。如果在处理Flush和End调用之后仍然会发生这种情况,我会检查Fiddler发生了什么,并且可能尝试将此代码移动到.ashx处理程序中以使其脱离页面生命周期。