【问题标题】:Unblock (jQuery BlockUI) after file sent to browser through response stream文件通过响应流发送到浏览器后解除阻塞(jQuery BlockUI)
【发布时间】:2011-03-19 03:27:56
【问题描述】:

我有一个<asp:button /> 可以生成 PDF 报告。我想使用 jQuery BlockUI 来显示一条消息,上面写着:Generating Report..

使用:Response.BinaryWrite 然后我将文件发送给用户,使其在浏览器中显示为文件下载。

我无法让$.unblockUI(); 开火。一旦文件下载开始或完成或被取消,我希望它消失。目前它从来没有..好像页面没有重新加载,我已经点击服务器但它返回相同的页面。

我尝试过的事情:

  • 将 JS 中的变量设置为 true 等等document.ready() 如果设置为 true,它将调用一个函数。这不起作用,因为即使我在代码中更改了变量,它也不会更改发送到客户端的 HTML。
  • 这种事:Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function() { $.unblockUI; }); //register with Microsoft way $(document).ajaxStop($.unblockUI); //double the insurance and register with jquery way 永远不会被调用..

这可以通过更新面板来实现吗?

有什么想法吗?

如果有帮助的话:

Response.AddHeader("Content-Disposition", "attachment;filename=""" & ShortFilename & """")
        Response.AddHeader("Content-Length", byteArray.Length)
        Response.BinaryWrite(byteArray)
        Response.Flush()
        Response.End()

我明白为什么这不起作用,页面并没有刷新,只是有一个响应流被发送到浏览器,但肯定有一个我可以锁定的事件?

【问题讨论】:

  • 你找到解决这个问题的方法了吗?
  • 实际上不可能按照我最初打算的方式进行,因为返回流不会重新加载页面或允许您传递任何自定义逻辑..
  • 解决方案是在显示加载屏幕的情况下进行所有处理,然后返回将删除 BlockUI 的响应,然后请求您要流式传输的文件,或者将它们重定向到将重新请求流..您需要暂时将文件保留在硬盘上才能执行此操作..

标签: asp.net jquery blockui


【解决方案1】:

一个想法可能是创建一个执行 PDF 加载的子窗口,并让父窗口确定子窗口何时关闭或其他什么。

Is it possible for parent window to notice if child window has been closed?

【讨论】:

    【解决方案2】:

    解决方案是首先正常阻止 UI。然后向您的报告生成器发出 AJAX 请求,在生成 PDF 时将其在本地存储一小段时间,或者将其放在用户注销或登录超时时清除的临时文件夹中。让报告生成器返回成功消息和 URL。

    让客户端 ajax 请求处理成功消息,删除 BlockUI,然后使用以下方法调用 URL:

    window.location="http://yourURL/temp/report.pdf
    

    浏览器将开始下载文件,您就完成了!

    https://stackoverflow.com/a/7660817/181197

    【讨论】:

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