ASP.NET - 停止/解决方法Response.Write()的异步行为

时间:2011-05-27 15:36:00

标签: jquery asp.net ajax race-condition

我有一个通过

向用户发送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 SOmultiple google网站。

<iframe id="pdfPopup" style="visibility:hidden;height:0px;width:0px;" onload="Redirect();"></iframe>

onload会在页面加载时触发,但在我调用reload并在其中放入PDF时则不会触发。所以我撞到了一堵砖墙。有人有这方面的解决方案吗?

2 个答案:

答案 0 :(得分:2)

您不能将Response.BinaryWriteResponse.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";