ASP.NET AJAX: Отключение пользовательского интерфейса во время выполнения частичного постбэка - Остановка других частичных постбэков
ОГЛАВЛЕНИЕ
Остановка других частичных постбэков
Деактивация элемента пользовательского интерфейса, который вызывает частичный постбэк, обеспечивает уверенность в том, что этот самый элемент управления не вызовет другой постбэк, тем самым прекращая текущий запрос. Но что если какой-либо другой элемент в том же UpdatePanel вызовет частичный постбэк? Например, что случится, если в файле Disabling.aspx пользователь нажмет кнопку "Button 1" и затем, во время выполнения постбэка, нажмет кнопку "Button 2"? Нажатие на кнопку "Button 2" прекратит выполнение постбэка, вызванного нажатием кнопки "Button 1", и затем начнет выполнение собственного постбэка.
Чтобы предотвратить это мы можем отключить весь пользовательский интерфейс на время выполнения частичного постбэка (вместо того, чтобы отключать только кнопку "Button 1"). Изучите последний пример из статьи "Предоставляем визуальный фидбэк с помощью элемента управления UpdateProgress". Другим выходом из данной ситуации будет программное предотвращение запуска частичного постбэка в случае, если другой уже выполняется.
Объект sender, переданный обработчику события initializeRequest, обладает функцией, названной get_isInAsyncPostBack(), которая возвращает логическое значение (Boolean), указывающее на то, выполняется ли в данный момент частичный постбэк. Чтобы разрешить выполнение единственного постбэка, изучите данную функцию и отмените текущий запрос в случае, если она возвращает значение True ("Истина"). Следующий скрипт JavaScript демонстрирует способ достижения данного результата:
function PageRequestManager_initializeRequest(sender, args)
{
if (sender.get_isInAsyncPostBack())
{
args.set_cancel(true);
alert('The page is currently serving a request. Please wait until this request completes, then try again.');
}
}
В дополнение к отмене запроса на выполенение частичного постбэка, код, указанный выше, также отображает оповещение , объясняющее пользователю, что его новый запрос не может быть обработан, пока текущий запрос не завершится. Следующее изображение демонстрирует данную функциональность в действии. Кнопка "Button 1" была нажата во время выполнения частичного постбэка. Кнопка деактивирована благодаря добавлению предыдущего кода. Если пользователь нажимает кнопку "Button 2" во время частичного постбэка, то соответствующее окно с оповещением будет отображено, и запрос на выполнение частичного постбэка, вызванного нажатием на кнопку "Button 2", будет отменен.
