【问题标题】:Updatepanels: Prevent multiple concurrent requests by same user?更新面板:防止同一用户的多个并发请求?
【发布时间】:2009-10-01 23:06:05
【问题描述】:

在带有大更新面板的相当复杂的屏幕上,我遇到了以下问题:

如果用户非常快地点击某个按钮 6 或 7 次,它似乎最终会不按顺序处理最后一个请求并出现问题。具体来说,会话​​状态中有一个 xml 文档,并且它不同步。

我真正想做的是阻止点击此按钮,直到回发完成。我知道我可能会找到一种使用 Javascript 的简单方法,但它似乎是内置的。

有什么想法吗?

注意:下面的答案很有帮助,但并没有解决问题。在使用 onClientClick 禁用链接按钮,然后在再次启用回发后允许它返回后,问题仍然存在。即使更新面板在屏幕上绘制了新的、启用的链接按钮,也几乎好像更新面板还没有完成所有操作。

更多注释(已解决!):我使用 BlockUI(jQuery 插件)解决了这个问题。请参阅下面的答案。

【问题讨论】:

  • 任何带有 BlockUI 的解决方案?代码示例?

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


【解决方案1】:

ASP.NET UpdatePanel 始终尊重最后一个请求。如果您在处理请求时发出请求,则第一个请求将被终止并处理当前请求。它的设计和构建就是以这种方式工作。

一旦点击按钮,我会使用 JavaScript 禁用该按钮。

【讨论】:

  • ...并确保在处理完成后重新启用按钮。
  • 如果有时间可以看看我的笔记...这里还有更多内容。
【解决方案2】:

更新面板?我将假设您使用的是 MS AJAX,如果是,我建议您下载 AJAX 工具包(如果您还没有下载的话)。这个工具包带有许多现成的控件和扩展来帮助您在启用 AJAX 的应用程序中。例如,有一个名为“ConfirmButton”的扩展程序可以帮助您防止用户多次单击一个按钮,而且它还以一种非常酷和优雅的方式做到这一点。

另一种选择是使用 JavaScript 或更好,创建一个自定义按钮控件,该控件具有在单击后禁用的属性,如果您这样做,将很容易在您的其他应用程序中重用它。

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    在我不久前研究的一个家庭推出的 AJAX 框架中,我们只记录了 javascript 中的最后一次调用(带有许多参数的 javascript 函数调用)并阻止了具有相同参数的后续调用。这并不理想,但它在紧要关头起到了作用。

    【讨论】:

      【解决方案4】:

      我在基础设施控制方面遇到了一些“Asyc”问题,但在 Scripmanager 中添加 ScriptMode="Release" 后问题得到解决。

      【讨论】:

        【解决方案5】:

        下面的链接在大约半小时内解决了我的问题。由于更新面板的时间问题,仅仅使用 javascript 禁用(我尝试了几种不同的方法......)并没有做到这一点。

        Disabling UpdatePanels While an Asynchronous Postback is in Progress

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-18
          • 1970-01-01
          • 2019-10-05
          • 2012-06-12
          • 1970-01-01
          • 2012-11-18
          • 1970-01-01
          • 2021-03-22
          相关资源
          最近更新 更多