【问题标题】:When using an ASP.Net UpdatePanel, requests from Popup window are blocked使用 ASP.Net UpdatePanel 时,来自弹出窗口的请求被阻止
【发布时间】:2012-10-30 16:50:41
【问题描述】:

全部,

我有一个 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 之外创建按钮并模拟点击,但也没有类似的效果。

有人知道吗?

提前致谢!

【问题讨论】:

  • 请求是如何产生的?通过回传?您是否尝试过将 javascript 代码直接实现到 aspx 文件?

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


【解决方案1】:

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

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

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

【讨论】:

  • 这正是解决办法!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
相关资源
最近更新 更多