好的,我已完成作业并找到类似的主题。但是,我还没有找到一个好的答案。
使用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。
我已经看到其他帖子通过将文件生成/下载分解为单独的功能来推荐更复杂的解决方案。我非常希望避免将文件保存在服务器上,或者必须轮询服务器以查看文件是否已完成。这应该很简单。
如果有任何想法,请告诉我。
谢谢, 贝
答案 0 :(得分:3)
在SO上发布了一段时间的帖子: Detect when browser receives file download
它的作用实际上是将cookie(C#Generated)与文件(用户正在下载)一起发送给客户端。一旦客户端拥有cookie,理论上这会在文件下载后发生。 Javascript将检查客户端是否具有该cookie,如果是,Javascript将取消阻止UI。