【问题标题】:On forcing download: File Download dialog opens twice in IE6 SP1强制下载:文件下载对话框在 IE6 SP1 中打开两次
【发布时间】:2012-07-06 06:01:21
【问题描述】:

我的 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();
}

【问题讨论】:

  • 您是否安装了任何浏览器插件作为浏览器的一部分(IE6 SP1),它可以捕获这样的链接给您一个“保存..”对话框?
  • 好主意,但没有。我在新安装的系统上尝试过它仍然会发生......

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


【解决方案1】:

您的代码看起来不错,但我想我会指出一些奇怪的地方。

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

另外,Response.End() 自动调用 Flush() 如果缓冲是打开的,所以你不应该像那样在最后调用 Flush() - 充其量,它应该在调用 End 之前。 End() 也引发了 ThreadAbortedException,所以如果你可以完全避免调用它,那将是理想的。如果你可以使用HttpApplication.CompleteRequest(),那就更好了。

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

【讨论】:

  • 感谢您的回答!我不使用 WriteFile 的原因是因为我没有使用文件系统中的文件,而是动态创建文档。这是关于 Response.End() 的非常有用的信息。我将尝试使用 CompleteRequest 并看看它是如何工作的。谢谢!
  • 好吧,我尝试了 HttpApplication.CompleteRequest(),但它的行为仍然相同。 Fiddler 也没有帮助,因为第一个和第二个“下载文件”对话框之间似乎没有发生任何事情......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-07
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
相关资源
最近更新 更多