所有
我有一个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之外创建按钮并模拟点击,但是没有任何类似的工作。
有没有人对此有所了解?
提前致谢!
答案 0 :(得分:1)
原因是页面正在使用会话状态,因此任何请求都会阻止共享相同会话密钥的所有其他页面。
如果您的页面没有写入会话,那么您可以对它们应用IReadOnlySessionState属性,以便它们仅在存在非只读请求时阻止,而不是在所有并发请求都使用只读会话时阻止。
public class YourPage: Page, IReadOnlySessionState { ... }