我有一个通过
向用户发送PDF的流程Response.BinaryWrite(pdf);
完成后,我想
Response.Redirect("Default.aspx");
问题是重定向在BinaryWrite()
完成之前触发。我知道这是因为我没有看到弹出窗口下载PDF,因为我应该。
如果我删除
Response.Redirect("Default.aspx");
然后我按照自己的意愿获得弹出窗口。所以,这里存在竞争条件(可能与HTTP无连接有关)。我能做到
Thread.Sleep(5000);
但这太荒谬了。这个问题有一个很好的解决方案吗?
<小时/> 我试过AJAX。这也不起作用。 Due to an issue with AJAX and popups,我必须使用解决方法
window.frames["#pdfPopup"].location.reload();
让弹出窗口显示。
然后这段代码永远不会运行......
alert('before href');//no alert ever displays
window.location.href = "http://www.yahoo.com/";
这可能是因为我调用了reload()。有什么想法吗?
<小时/> 我迷上了onload for the frame,但这仍然无效!啊。我读到onload不会触发包含activeX控件的帧,包括PDF。我读了这个on SO和multiple google网站。
<iframe id="pdfPopup" style="visibility:hidden;height:0px;width:0px;" onload="Redirect();"></iframe>
onload会在页面加载时触发,但在我调用reload并在其中放入PDF时则不会触发。所以我撞到了一堵砖墙。有人有这方面的解决方案吗?
答案 0 :(得分:2)
您不能将Response.BinaryWrite
与Response.Redirect
一起使用,因为用户代理将处理重定向的HTTP 302响应并采取相应措施。你应该做的是使用其中一个。使用Response.BinartyWrite
(只要没有任何失败并且您没有手动设置响应代码)将在响应结束后返回HTTP 200以及内容。
答案 1 :(得分:2)
而不是使用document.href
在客户端通过window.open
打开弹出窗口,并传递URL以在那里下载PDF。然后,您可以执行重定向
window.open("PDFService.aspx?param1=...");
document.location.href = "Default.aspx";