我有<asp:button />
生成PDF报告。我想使用jQuery BlockUI来显示一条消息:生成报告..
使用:Response.BinaryWrite
然后我将文件发送给用户,使其在浏览器中显示为文件下载。
我无法触发$.unblockUI();
。文件下载开始或已完成或取消后,我希望它消失。目前它从来没有...就好像页面没有重新加载,我已经点击了服务器,但它返回了相同的页面。
我尝试过的事情:
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()
我可以看到为什么这不起作用,无论如何页面都没有刷新只有一个响应流被发送到浏览器,但肯定有一个我可以锁定的事件?
答案 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,然后使用:
调用URLwindow.location="http://yourURL/temp/report.pdf
浏览器将开始下载文件,您就完成了!