0

我有一个页面将大量数据导出为 excel 2007 启用宏的格式。在创建 excel 文件后,我最后有 Response.Redirect 以重定向到另一个页面,但是当我有大量数据(即大约 60,000 多行)时,重定向不起作用。下面是我用来保存 excel 文件的代码片段:

Response.Clear();
Response.AppendHeader("content-disposition", "attachment; filename=RegionData.xlsm");
Response.ContentType = "application/octet-stream";
wbRegionData.Save(Response.OutputStream);//();
Response.End();
Response.Redirect("RegionData.aspx?PALID=" + AVListID, true);

谢谢您的帮助。

4

3 回答 3

1

您不能在同一服务器响应中进行文件下载和重定向。如果您需要在成功下载文件后执行重定向,您将需要以某种方式告诉客户端文件下载成功发生,据我所知,这只能通过写入 cookie 来完成。

我创建了 jQuery 文件下载插件 ( Demo ) ( GitHub ) (Blog Posts ),它简化了很多这样的东西,使用插件你的代码可能是这样的:

ASP.NET 代码:

Response.Clear();
Response.AppendHeader("content-disposition", "attachment; filename=RegionData.xlsm");
Response.ContentType = "application/octet-stream";
Response.SetCookie(new HttpCookie("fileDownload", "true"){Path = "/"});
wbRegionData.Save(Response.OutputStream);//();
Response.End();

JavaScript:

$.fileDownload("/urltofiledownload/", {
    successCallback: function (url) {
        window.location = "/redirecturl/";
    }
});

如果没有更多代码,我无法为您提供完整的解决方案(请查看演示示例),但我认为使用该插件将是您最简单和最好的选择。

于 2012-06-25T03:02:47.857 回答
0

您不能,因为您正在通过调用关闭响应Response.End();您必须分别添加定义这两个操作(下载和重定向)。

于 2012-06-25T02:50:50.313 回答
0

它不起作用,因为 Respose.End() 方法停止了页面的正常执行,我已经重新编写了您的代码并删除了 de Response.End() 方法,现在它可以工作了。

    Response.Clear();
    Response.AppendHeader("content-disposition", "attachment; filename=RegionData.xlsm");
    Response.ContentType = "application/octet-stream";
    wbRegionData.Save(Response.OutputStream);//();
    Response.Redirect("RegionData.aspx?PALID=" + AVListID, true);
于 2012-06-25T02:51:25.560 回答