使用ASP.Net UpdatePanel时,会阻止来自弹出窗口的请求

时间:2012-10-30 16:50:41

标签: c# asp.net asp.net-ajax updatepanel

所有

我有一个UpdatePanel正在进行一些长时间运行的请求来收集大量数据。有时返回需要90秒。

第一个请求返回呈现为文档链接的数据。单击该链接将打开一个新的浏览器窗口,该URL具有一个查询字符串,告知系统要打开哪个文档。

在呈现客户端的链接时,这是一段代码:

 HtmlAnchor alink = new HtmlAnchor();
 alink.HRef = "javascript:openDocument('"+ item.Url +"')";   //item.Url;

// here is the JS on the client page
function openDocument(path) {
    window.open(path);
 }

因此,当用户点击链接时,弹出窗口会打开。问题是它会在弹出窗口发送请求之前等待UpdatePanel完成其请求。

我可以从弹出窗口中复制网址,打开一个新浏览器,然后将网址粘贴到新浏览器中,然后按预期打开文档。

这让我相信UpdatePanel会以某种方式阻止弹出窗口的请求。在用户可以从第一个结果打开文档之前,我宁愿让用户等到UpdatePanel的AJAX请求完成。

我该如何解决这个障碍?我已经尝试在UpdatePanel的ContentArea之外创建按钮并模拟点击,但是没有任何类似的工作。

有没有人对此有所了解?

提前致谢!

1 个答案:

答案 0 :(得分:1)

原因是页面正在使用会话状态,因此任何请求都会阻止共享相同会话密钥的所有其他页面。

如果您的页面没有写入会话,那么您可以对它们应用IReadOnlySessionState属性,以便它们仅在存在非只读请求时阻止,而不是在所有并发请求都使用只读会话时阻止。

public class YourPage: Page, IReadOnlySessionState { ... }