ASP.NET AJAX: Отключение пользовательского интерфейса во время выполнения частичного постбэка
ОГЛАВЛЕНИЕ
Если частичный постбэк был вызван из того же UpdatePanel в то же самое время как другой частичный постбэк уже был вызван и выполняется, то постбэк, который вызвали первым, прекращается, и начинается выполнение второго постбэка. Прекращение частичного постбэка означает, что ASP.NET AJAX Framework в браузере уже не ожидает ответа с сервера на отосланный запрос. Оно не останавливает обработку на сервере и не производит откат изменений состояния, которые могли произойти на сервере. Следовательно, если при частичном постбэке добавляются записи в базу данных или выполняются какие-либо другие изменения, для которых пользователь нажимает какую-то кнопку в UpdatePanel, тем самым вызывая частичный постбэк, а затем повторно нажмет ту же самую кнопку во время выполнения первого постбэка, то в базу данных будут добавлены две одинаковые записи.
Существует несколько путей предотвращения такого двойного вызова частичного постбэка. Самым эффективным способом, по-моему, является "блокировка" области путем прикрытия экрана элементом <div>. (Рассмотрите последний пример в статье "Предоставляем визуальный фидбэк с помощью элемента управления UpdateProgress".) Другим вариантом является отключение элемента пользовательского интерфейса, вызвавшего частичный постбэк во время выполнения другого постбэка. Это предотвратит повторный вызов частичного постбэка. Читайте далее, чтобы больше узнать об этом!