我有一个页面可以将大量数据导出为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);
感谢您的帮助。
答案 0 :(得分:1)
您无法在同一服务器响应中执行文件下载和重定向。如果您需要在成功下载文件后执行重定向,则需要以某种方式告诉客户端已成功发生文件下载,这只能通过编写cookie来完成。
我创建了jQuery文件下载插件(Demo)(GitHub)(Blog Posts),这简化了很多这样的东西,使用插件你的代码可能是这样的:< / p>
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/";
}
});
如果没有更多代码,我无法为您提供完整的解决方案(请查看Demo示例),但我认为使用该插件将是您最简单,最好的选择。
答案 1 :(得分:0)
您不能因为您通过调用Response.End();
来关闭响应。您必须单独添加定义这两个操作(下载和重定向)。
答案 2 :(得分:0)
它不起作用,因为Response.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);