首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >回发后开始下载文件

回发后开始下载文件
EN

Stack Overflow用户
提问于 2011-02-08 04:50:04
回答 3查看 9.9K关注 0票数 6

在我的应用程序中,我构建了一个zip文件,供用户下载以获取一些导出的数据库信息。当用户单击"generate data“按钮并将请求记录到数据库中时,就会创建zip文件。

在我的页面上,我有一个Gridview,它显示用户的下载历史记录,并为他们提供在一段时间内下载最新生成的文件的能力。

我遇到的问题是,当他们点击按钮时,我希望页面刷新(从而刷新网格视图并显示他们的最新请求),然后开始为他们下载文件(IE,弹出提示,让他们决定是否打开/保存/取消)。

我可以在回发时开始下载,但是我的Gridview在它开始之前没有更新,所以它不会在列表中显示最新的请求。如何在下载提示开始之前更新网格视图?

我正在使用以下命令开始下载:

代码语言:javascript
运行
复制
    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调用刷新页面并开始下载,但收效甚微。我曾想过打开一个模式对话框,让他们点击一个链接开始下载,然后在模式关闭时刷新页面,但如果我找不到其他解决方案,这是最后的办法。

任何帮助都是非常感谢的!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-08 04:59:06

问题是,您不会将页面发送回用户。用户单击该按钮,这将发送一个HTTP请求,您将为该请求生成一个包含要下载的文件的HTTP响应。如果您希望刷新页面,然后才将要下载的文件发送给他,则需要发送一个正常的回发结果(不调用BeginDownload方法),然后以某种方式强制他执行另一个请求,然后您使用该文件进行响应。

这里有多种选项:

  • 在页面上包含meta refresh标记
  • use an onload JavaScript
  • use an iframe
  • …或者如您所说,让用户单击一个链接。

所有的方法都有它们的缺点(特别要注意IE的“有害下载”保护,在某些情况下,这可能很烦人),你可能至少应该包括一个带有“如果下载没有自动开始,点击这里”的下载链接。)

票数 2
EN

Stack Overflow用户

发布于 2011-02-08 04:57:01

下面是我以前做过类似的事情:

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

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

票数 3
EN

Stack Overflow用户

发布于 2011-02-08 04:56:48

听起来你一次做的事情太多了。我建议回发以更新网格视图,然后使用重定向到新的专用页面(或ashx处理程序)来下载文件。当您在下载页面/ashx处理程序中使用content-disposition头时,网格视图页面应该保持可见。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4926409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档