1

全部,

我有一个 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 完成其请求,然后弹出窗口才会发送其请求。

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

这让我相信 UpdatePanel 以某种方式阻止了弹出窗口的请求。我不想让用户等到 UpdatePanel 的 AJAX 请求完成后,用户才能从第一个结果中打开文档。

我该如何解决这个阻塞?我尝试在 UpdatePanel 的 ContentArea 之外创建按钮并模拟点击,但也没有类似的效果。

有人对此有任何想法吗?

提前致谢!

4

1 回答 1

1

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

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

public class YourPage: Page, IReadOnlySessionState { ... }
于 2012-10-30T16:55:26.473 回答