【发布时间】: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 的响应,然后请求您要流式传输的文件,或者将它们重定向到将重新请求流..您需要暂时将文件保留在硬盘上才能执行此操作..