代码之家  ›  专栏  ›  技术社区  ›  Brian MacKay

updatepanels:防止同一用户同时发出多个请求?

  •  0
  • Brian MacKay  · 技术社区  · 15 年前

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

    如果用户点击某个按钮6或7次真的很快,它似乎最终会不按顺序处理最后一个请求,并出现问题。具体来说,有一个处于会话状态的XML文档,它会失去同步。

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

    有什么想法吗?

    注: 下面的答案是有帮助的,但他们还没有解决这个问题。使用onclientclick禁用LinkButton,然后允许它在重新启用回发后返回,问题仍然存在。几乎就像更新面板没有完成所有的工作,即使它在屏幕上绘制了新的、启用的链接按钮。

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

    5 回复  |  直到 12 年前
        1
  •  3
  •   rick schott    15 年前

    ASP.NET UpdatePanel始终接受最后一个请求。如果在处理请求时发出请求,则第一个请求将终止,当前请求将被处理。它的设计和建造就是为了这样。

    一旦点击了这个按钮,我就会用javascript禁用它。

        2
  •  1
  •   Ricardo Sanchez    15 年前

    更新面板?我假设您使用的是MS Ajax,如果是这样的话,我建议您下载Ajax工具包,如果您没有下载的话。这个工具包提供了许多随时可用的控件和扩展来帮助您使用支持Ajax的应用程序。例如,有一个扩展名为“confirmbutton”,它将帮助您防止用户多次单击某个按钮,而且它还以一种非常酷和优雅的方式进行操作。

    另一个选项是使用javascript,或者更好的方法是,创建一个自定义按钮控件,该控件的属性在单击后将被禁用,如果这样做,在其他应用程序中重用它将非常容易。

    希望这有帮助。

        3
  •  1
  •   Jacob G    15 年前

    在我之前工作过的一个自制的Ajax框架中,我们简单地将最后一次调用记录在javascript(带有许多参数的javascript函数调用)中,并阻止随后使用相同参数的调用。这不太理想,但在紧要关头就成功了。

        4
  •  1
  •   Miguel Arenas    12 年前

    我在基础设施控制方面遇到了一些“asyc”问题,但是在scripmanager中添加了scriptmode=“release”之后,问题得到了解决。

        5
  •  0
  •   Brian MacKay    15 年前

    下面的链接在大约半小时内解决了我的问题。只是使用了一个禁用javascript的方法(我尝试了几种不同的方法…)并没有完成这个技巧,因为更新面板是计时的。

    Disabling UpdatePanels While an Asynchronous Postback is in Progress