c# - 回发后开始文件下载

标签 c# jquery asp.net gridview download

在我的应用程序中,我正在构建一个 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 调用来刷新页面并开始下载,但收效甚微。我考虑过打开模态对话框并让他们单击链接开始下载,然后在模态关闭时刷新页面,但如果我找不到其他解决方案,那是最后的选择。

非常感谢任何帮助!

最佳答案

这是我前段时间做类似事情的方法:

  1. 在回发(生成数据)时,将更新后的页面发送回 GridView 中的最新数据。
  2. 添加一个小的 javascript 函数,该函数在页面完成加载并请求生成的文件时执行(类似于 window.location='fileurl';。当然只在回发时发送此 javascript 函数。

请求文件时显示页面的内容不会改变,只会弹出浏览器的保存对话框。

关于c# - 回发后开始文件下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4926409/

相关文章:

c# - 字典初始化器的类型

javascript - 数据库中的建议值

javascript - 默认更改为DataTable

javascript - 为什么我的 AJAX post 请求不起作用?

javascript - 根据另一个不工作的元素过滤选择元素

c# - 安全地实现两因素身份验证

asp.net - 使用没有 API key 的谷歌地图?

c# - 数据绑定(bind)到父级可能为 null 的嵌套属性

c# - Visual Studio - 坚持固定窗口?

c# - 如何在 C# 中将数字拆分为单个数字?