Updatepanels: Предотвратить несколько одновременных запросов от одного пользователя? - PullRequest
0 голосов
/ 02 октября 2009

На довольно сложном экране с большой панелью обновления у меня возникает следующая проблема:

Если пользователь нажимает на определенную кнопку 6 или 7 раз действительно быстро, кажется, что он в конечном итоге обрабатывает последний запрос вне очереди и возникают проблемы. В частности, есть документ XML в состоянии сеанса, и он не синхронизирован.

Что я действительно хочу сделать, так это блокировать нажатие этой кнопки до завершения обратной передачи. Я знаю, что, возможно, смогу найти простой способ сделать это с помощью Javascript, но кажется, что он может быть встроенным.

Есть мысли?

Примечание: Ответы ниже полезны, но они не решили проблему. После отключения кнопки ссылки с помощью onClientClick и последующего разрешения ее возврата после повторного включения обратной передачи проблема остается. Это похоже на то, как будто панель обновлений не совсем справилась со всем, даже если она нарисовала на экране свежую, активированную кнопку ссылки.

Больше замечаний (решено!): Я решил это с помощью BlockUI (плагин jQuery). Смотрите мой ответ ниже.

Ответы [ 5 ]

3 голосов
/ 02 октября 2009

ASP.NET UpdatePanel всегда учитывает последний запрос. Если вы делаете запрос, пока один обрабатывает, первый запрос прекращается, а текущий обрабатывается. Он был спроектирован и построен для такой работы.

Я бы отключил кнопку с помощью JavaScript после ее нажатия.

1 голос
/ 21 февраля 2013

У меня были некоторые «асинхронные» проблемы с контролем инфраструктуры, но после добавления ScriptMode = «Release» в Scripmanager проблема была решена.

1 голос
/ 02 октября 2009

В домашней AJAX-среде, над которой я работал некоторое время назад, мы просто регистрировали последний вызов в javascript (вызов функции javascript со многими параметрами) и предотвращали последующие вызовы с идентичными параметрами. Это не было идеальным, но это сработало в крайнем случае.

1 голос
/ 02 октября 2009

UpdatePanel? Я предполагаю, что вы используете MS AJAX, если это так, я рекомендую вам загрузить инструментарий AJAX, если вы этого еще не сделали. Этот инструментарий поставляется со многими готовыми к использованию элементами управления и расширениями, которые помогут вам в вашем приложении с поддержкой AJAX. Например, есть одно расширение под названием «ConfirmButton», которое поможет вам предотвратить нажатие кнопки пользователем более одного раза, а также делает это очень круто и элегантно.

Другим вариантом будет использование JavaScript или, что еще лучше, создание пользовательского элемента управления кнопки, свойство которого будет отключено после нажатия, если вы это сделаете, его будет действительно легко использовать в других приложениях. 1003 *

Надеюсь, это поможет.

0 голосов
/ 02 октября 2009

Ссылка ниже решила мою проблему примерно за полчаса. Простое отключение JavaScript (и я пробовал несколько разных способов ...) не помогло из-за времени обновления панели.

Отключение UpdatePanels во время выполнения асинхронной обратной передачи

...