JQuery BlockUI - 文件下载后如何解锁 UI?

发布于 2024-07-15 05:53:41 字数 1003 浏览 12 评论 0原文

使用 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. 将文件存储在会话中并重定向到同一页面并生成下载。

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

有什么建议么?

Using ASP.Net, JQuery and BlockUI, I'm trying to unblock the UI after a download file dialog is shown.

I block the UI when export button is clicked:

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

After this, I generate the file server side using:

        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();
        }

After this code has executed, I would like to unblock the UI.

I have considered different options:

  1. Poll using Ajax calls to see if the file has been generated.
  2. Store the file in Session and redirect to same page and generate download then.

But both options seem ackward, and I think there must be a clever JavaScript way to get a handle on or wait for a file dialog.

Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

于我来说 2024-07-22 05:53:41

没有办法检查这一点; 没有像 ondownloadready 这样的事件。
但有一些解决方法
http://gruffcode.com/2010 /10/28/在浏览器中检测文件下载对话框

There is no way to check this; there is no event like ondownloadready.
But there are some work-arounds
http://gruffcode.com/2010/10/28/detecting-the-file-download-dialog-in-the-browser

‘画卷フ 2024-07-22 05:53:41

不要将文件存储在会话中,这是对资源的巨大浪费。 为什么不直接将表单数据发布到“下载”页面并显示“您的文件应立即下载...”消息。 这就是 www.download.com 等热门下载网站在到达其 下载页面

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

Don't store the file in the session, that's a huge waste of resources. Why not just post your form data to a "download" page with a "Your file should download momentarily..." message. This is how popular download sites like www.download.com do it when arrive at their download page.

This gives the user the opportunity to retry simply by refreshing, and you don't need to worry about session timeouts because all your data is in the POST header when they arrived at the page.

安人多梦 2024-07-22 05:53:41

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

详细信息在这里 http://geekswithblogs.net/GruffCode/archive/2010/10/28/detecting-the -文件下载对话框在浏览器中.aspx

The method I used is to send a cookie in addition to the file attachment which you can detect via a timeout using JavaScript and then unblock the ui

Details are here http://geekswithblogs.net/GruffCode/archive/2010/10/28/detecting-the-file-download-dialog-in-the-browser.aspx

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文