4

使用 ASP.Net、JQuery 和 BlockUI,我试图在显示下载文件对话框后解除对 UI 的阻止。

单击导出按钮时,我会阻止 UI:

   <script type="text/javascript">     
    $(document).ready(function(){        
        $('#<%= BtnExport.ClientID%>').click(function(){
            $.blockUI(); 
        });
    });    
    </script>

在此之后,我使用以下命令生成文件服务器端:

        private void SendFileToUser(byte[] file, string contentType, string filename)
        {
            Response.Clear();
            Response.ContentType = contentType;
            Response.AppendHeader("Content-Disposition", "attachment; filename="+filename);
            Response.OutputStream.Write(file,0,file.Length);
            Response.OutputStream.Flush();   
            Response.End();
        }

执行此代码后,我想解除对 UI 的阻止。

我考虑了不同的选择:

  1. 使用 Ajax 调用轮询以查看文件是否已生成。
  2. 将文件存储在 Session 中并重定向到同一页面并生成下载。

但是这两个选项似乎都不合适,我认为必须有一种聪明的 JavaScript 方法来处理或等待文件对话框。

有什么建议么?

4

3 回答 3

1

没有办法检查这一点;没有像 ondownloadready 这样的事件。但是有一些解决方法 http://gruffcode.com/2010/10/28/detecting-the-file-download-dialog-in-the-browser

于 2013-04-11T07:49:49.573 回答
0

不要将文件存储在会话中,这是对资源的巨大浪费。为什么不将您的表单数据发布到带有“您的文件应立即下载...”消息的“下载”页面。这就是流行的下载网站(如www.download.com)在到达其下载页面时的做法。

这使用户有机会通过刷新来重试,并且您无需担心会话超时,因为您的所有数据在到达页面时都在 POST 标头中。

于 2009-03-25T21:45:13.667 回答
0

我使用的方法是除了发送文件附件之外的 cookie,您可以使用 JavaScript 通过超时检测,然后解除阻止 ui

详细信息在这里http://geekswithblogs.net/GruffCode/archive/2010/10/28/detecting-the-file-download-dialog-in-the-browser.aspx

于 2014-09-17T12:36:57.423 回答