Updatepanels:防止同一用户发出多个并发请求?

时间:2009-10-01 23:06:05

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

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

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

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

有什么想法?

注意:以下答案很有帮助,但它们没有解决问题。使用onClientClick禁用链接按钮,然后在再次启用回发后允许它返回后,问题仍然存在。即使已经在屏幕上绘制了新的启用链接按钮,这几乎就像更新面板没有完成所有内容一样。

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

5 个答案:

答案 0 :(得分:3)

ASP.NET UpdatePanel始终遵循最后一个请求。如果您在处理请求时发出请求,则会终止第一个请求并处理当前请求。它的设计和制造是为了这种方式。

点击后,我会用JavaScript禁用该按钮。

答案 1 :(得分:1)

的UpdatePanel?我假设您正在使用MS AJAX,如果是这样,我建议您下载AJAX工具包,如果您还没有这样做。此工具包附带了许多随时可用的控件和扩展,可帮助您使用支持AJAX的应用程序。例如,有一个名为“ConfirmButton”的扩展程序可以帮助您防止用户多次单击按钮,而且它也可以非常酷和优雅的方式完成。

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

希望这有帮助。

答案 2 :(得分:1)

在一个家庭推出的AJAX框架中我曾经工作了一段时间,我们只是在javascript(带有许多参数的javascript函数调用)中记录了最后一个调用,并阻止了后续调用相同的参数。这不是理想的,但它在紧要关头做了伎俩。

答案 3 :(得分:1)

我在infragistics控件中遇到了一些“Asyc”问题,但在Scripmanager中添加ScriptMode =“Release”之后问题就解决了。

答案 4 :(得分:0)

以下链接在大约半小时内解决了我的问题。刚刚使用javascript禁用(我尝试了几种不同的方式......)由于updatepanel的时间安排而没有做到这一点。

Disabling UpdatePanels While an Asynchronous Postback is in Progress