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

时间:2010-07-21 17:38:15

标签: asp.net jquery blockui

我有<asp:button />生成PDF报告。我想使用jQuery BlockUI来显示一条消息:生成报告..

使用: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 永远不会被召唤..

这可以通过updatepanel实现吗?

有什么想法吗?

如果它有帮助:

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

我可以看到为什么这不起作用,无论如何页面都没有刷新只有一个响应流被发送到浏览器,但肯定有一个我可以锁定的事件?

2 个答案:

答案 0 :(得分:0)

一个想法可能是创建一个子窗口来完成PDF加载,并让父窗口在子窗口关闭或其他什么时解决。

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

答案 1 :(得分:0)

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

让客户端ajax请求处理成功消息,删除BlockUI,然后使用:

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

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

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