【问题标题】:JQuery BlockUI - How to unblock UI after file download?JQuery BlockUI - 文件下载后如何解锁 UI?
【发布时间】:2010-10-15 13:50:20
【问题描述】:

使用 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 方法来处理或等待文件对话框。

有什么建议吗?

【问题讨论】:

    标签: asp.net javascript jquery blockui


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-25
          • 1970-01-01
          • 1970-01-01
          • 2012-05-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多