MVC3 - 文件下载 - 等待状态指示器

时间:2011-09-21 18:13:32

标签: c# javascript ajax asp.net-mvc-3 download

好的,我已完成作业并找到类似的主题。但是,我还没有找到一个好的答案。

使用MVC3,C#,Razor View Engine。

我的情景很简单。我有一个视图,其中一个链接调用控制器上的操作。该操作返回动态生成的文件。该过程需要1到10秒。在此期间,我想锁定UI并显示“Please Waite”消息。

我的第一次尝试使用了这样的东西:

@Ajax.ActionLink("my test link", "myAction", new { Controller = "myController" }, new AjaxOptions { OnBegin = "ajaxStart", OnComplete = "ajaxStop" }) 

然后,ajaxStart和ajaxStop函数使用jquery blockUI脚本来阻止和取消阻止UI并显示“Please Wait”消息。这有效,因为它显示了消息,但没有文件会下载。经过一些研究,我发现我无法使用Ajax来启动文件下载。如果我错了,请赐教。

所以,我回到了正常的ActionLink。这适用于我可以下载文件。我甚至可以捕获.click事件并阻止UI并显示等待消息。但是,我如何知道何时取消阻止UI?如何知道文件保存/打开对话框何时打开?也许如果我能抓住那个事件,我就可以解锁UI。

我已经看到其他帖子通过将文件生成/下载分解为单独的功能来推荐更复杂的解决方案。我非常希望避免将文件保存在服务器上,或者必须轮询服务器以查看文件是否已完成。这应该很简单。

如果有任何想法,请告诉我。

谢谢, 贝

1 个答案:

答案 0 :(得分:3)

在SO上发布了一段时间的帖子: Detect when browser receives file download

它引用了此链接:http://geekswithblogs.net/GruffCode/archive/2010/10/28/detecting-the-file-download-dialog-in-the-browser.aspx

它的作用实际上是将cookie(C#Generated)与文件(用户正在下载)一起发送给客户端。一旦客户端拥有cookie,理论上这会在文件下载后发生。 Javascript将检查客户端是否具有该cookie,如果是,Javascript将取消阻止UI。