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

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

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

使用 MVC3、C#、Razor View 引擎。

我的场景非常简单。我有一个带有调用 Controller 操作的链接的 View 。该操作返回一个动态生成的文件。该过程需要 1 到 10 秒。在此期间,我想锁定 UI 并显示“请稍候”消息。

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

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

然后 ajaxStart 和 ajaxStop 函数使用 jquery blockUI 脚本来阻止和取消阻止 UI 并显示“请稍候”消息。之所以有效,是因为它显示了消息,但不会下载任何文件。经过更多研究,我发现我无法使用 Ajax 启动文件下载。如果我错了,请赐教。

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

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

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

谢谢, 托尼

最佳答案

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# 生成)发送到客户端。一旦客户端有了 cookie,理论上这会在文件下载之后发生)。 Javascript 将检查客户端是否有该 cookie,如果有,Javascript 将解锁 UI。

关于c# - MVC3 - 文件下载 - 等待状态指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7504596/

相关文章:

javascript - 如何在 vanilla javascript 中通过 DOM 创建多个元素?

javascript - 如何在 node.js 中编写一个事件发射器,让你创建一个函数 "myFunction",然后在它运行时调用成功或失败?

php - 如何在 jQuery/Ajax 成功方法后调用另一个 php 页面?

c# - 如何禁用 ASP.NET 中某些控件的 UpdateProgress?

c# - 将 32 个 bool 值的集合转换为 32 位整数

c# - 隐式转换不可分配给接口(interface)

c# - WebService 不反序列化某些对象

c# - 在 C# 和 JavaScript 之间传递元素

javascript - 使用 jQuery 更改 twig foreach 循环中的类

jquery - 让 Isotope 在 AJAX 加载的容器上工作