在我的应用程序中,我构建了一个zip文件,供用户下载以获取一些导出的数据库信息。当用户单击"generate data“按钮并将请求记录到数据库中时,就会创建zip文件。
在我的页面上,我有一个Gridview,它显示用户的下载历史记录,并为他们提供在一段时间内下载最新生成的文件的能力。
我遇到的问题是,当他们点击按钮时,我希望页面刷新(从而刷新网格视图并显示他们的最新请求),然后开始为他们下载文件(IE,弹出提示,让他们决定是否打开/保存/取消)。
我可以在回发时开始下载,但是我的Gridview在它开始之前没有更新,所以它不会在列表中显示最新的请求。如何在下载提示开始之前更新网格视图?
我正在使用以下命令开始下载:
public void BeginDownload()
{
FileDownload download = InventoryService.GetLastThreeFileDownloads(this.EmployeeId).First();
FileInfo fi = new FileInfo(Server.MapPath(SERVER_DOWNLOAD_PATH) + download.DownloadFileName);
Response.Clear();
Response.ContentType = "application/zip";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + fi.Name);
Response.TransmitFile(fi.FullName);
Response.Flush();
}
如果隐藏字段设置为true (我是在他们单击按钮构建文件时设置的),则该方法在Page_Load事件中作为最后一项被调用。
我也尝试过通过jQuery / AJAX调用刷新页面并开始下载,但收效甚微。我曾想过打开一个模式对话框,让他们点击一个链接开始下载,然后在模式关闭时刷新页面,但如果我找不到其他解决方案,这是最后的办法。
任何帮助都是非常感谢的!
发布于 2011-02-08 04:59:06
问题是,您不会将页面发送回用户。用户单击该按钮,这将发送一个HTTP请求,您将为该请求生成一个包含要下载的文件的HTTP响应。如果您希望刷新页面,然后才将要下载的文件发送给他,则需要发送一个正常的回发结果(不调用BeginDownload
方法),然后以某种方式强制他执行另一个请求,然后您使用该文件进行响应。
这里有多种选项:
所有的方法都有它们的缺点(特别要注意IE的“有害下载”保护,在某些情况下,这可能很烦人),你可能至少应该包括一个带有“如果下载没有自动开始,点击这里”的下载链接。)
发布于 2011-02-08 04:57:01
下面是我以前做过类似的事情:
window.location='fileurl';
。当然,仅在回发时发送此javascript函数。当请求文件时,所显示页面的内容不会改变,它只会弹出浏览器的保存对话框。
发布于 2011-02-08 04:56:48
听起来你一次做的事情太多了。我建议回发以更新网格视图,然后使用重定向到新的专用页面(或ashx处理程序)来下载文件。当您在下载页面/ashx处理程序中使用content-disposition头时,网格视图页面应该保持可见。
https://stackoverflow.com/questions/4926409
复制相似问题