在我的应用程序中,我正在构建一个 zip 文件,供用户下载一些导出的数据库信息。当用户单击“生成数据”按钮并且我将请求记录在数据库中时,将创建 zip 文件。
在我的页面上,我有一个 Gridview,它显示了用户的下载历史记录,还为他们提供了在设定的时间段内下载最新生成的文件的能力。
我遇到的问题是当他们单击按钮时,我希望页面刷新(从而刷新 gridview 并显示他们的最新请求),然后开始为他们下载文件(IE,显示提示并让他们决定是否打开/保存/取消它)。
我可以在回帖时开始下载,但我的 Gridview 在开始之前没有更新,所以它没有在列表中显示最新的请求。如何在下载提示开始之前更新 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 调用来刷新页面并开始下载,但收效甚微。我考虑过打开模态对话框并让他们单击链接开始下载,然后在模态关闭时刷新页面,但如果我找不到其他解决方案,那是最后的选择。
非常感谢任何帮助!
最佳答案
这是我前段时间做类似事情的方法:
- 在回发(生成数据)时,将更新后的页面发送回 GridView 中的最新数据。
- 添加一个小的 javascript 函数,该函数在页面完成加载并请求生成的文件时执行(类似于
window.location='fileurl';
。当然只在回发时发送此 javascript 函数。
请求文件时显示页面的内容不会改变,只会弹出浏览器的保存对话框。
关于c# - 回发后开始文件下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4926409/