Web表单下载后无响应

时间:2012-11-19 14:24:43

标签: asp.net browser download

我正在使用ASP.NET(2.0),我们有一个页面,用户可以选择并下载一系列文件作为zip。通过使用DotNetZip库(这可能与问题无关,但为了完整性而包括在内),我可以在没有撤消困难的情况下工作。

用户检查了要下载的文件后,页面会进行回发,在按钮单击事件处理程序中,我使用以下代码:

    Response.Clear();
    Response.BufferOutput = false; // false = stream immediately
    Response.ContentType = "application/zip";
    Response.AddHeader("content-disposition", "filename=FileRequest.zip");

    using (ZipFile zip = new ZipFile())
    {
        zip.AddFile(MapPath("/datafiles/fileToZip.pdf"), "");
        zip.Save(Response.OutputStream);
    }
    Response.Close();

这一切看起来都很棒。用户单击该按钮,弹出下载窗口,用户下载zip。一切都很好......

......直到他们决定要在页面上做其他事情。表单中的按钮不再响应。例如,如果我再次单击下载按钮,它什么都不做。如果我重新加载页面,我可以重复这种行为......它可以运行一次,然后什么都不做。

我不明白为什么浏览器不发送新请求。这不是“旋转”或其他忙碌的行为。我认为这可能是一个浏览器问题,但我在IE和Firefox中都重复了这一点,所以看起来很可能是我不理解的东西。奇怪的是,它只是表单提交元素似乎没有响应。 Javascript仍然有效,常规链接也是如此。

为什么会发生这种情况,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

问题可能归结于你的回归;

   Response.ContentType = "application/zip";

一旦发送了这些内容(以及实际内容),浏览器就会认为它没有什么可做的(我相信)。

您可能应该创建一个专门用于下载文件的新窗口,方法是将文件选择保存在会话参数(或等效文件)中,然后打开一个包含下载代码的弹出窗口。

这将使父页面处于合适的状态。

答案 1 :(得分:0)

内容处置标题seems to be a discouraged solution。但是,如果将标准重定向用于zip文件,则会发生ASP.NET表单无法响应的相同效果。

我使用TančevSaša在“Response.Redirect to new window”Q& A中的代码解决了非常类似的问题(由服务器返回* .csv文件)并且效果很好。也许它可能在某些浏览器中产生一些弹出警告,但我认为这是在下载站点中经常这样做的。