代码之家  ›  专栏  ›  技术社区  ›  Markive

通过响应流将文件发送到浏览器后取消阻止(jQuery BlockUI)

  •  2
  • Markive  · 技术社区  · 14 年前

    我有一个 <asp:button />

    使用: 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()
    

    我可以理解为什么这样做不起作用,页面没有刷新,反正只是有一个响应流被发送到浏览器,但肯定有一个事件我可以锁定?

    2 回复  |  直到 14 年前
        1
  •  0
  •   Community Egal    7 年前

    一个想法是创建一个子窗口来加载PDF文件,并让父窗口知道子窗口何时关闭或什么的。

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

        2
  •  0
  •   Community Egal    7 年前

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

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

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

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

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

    推荐文章