ASP.NET AJAX: Клиентский объект PageRequestManager - Прерываение и отмена частичных постбэков
ОГЛАВЛЕНИЕ
Прерываение и отмена частичных постбэков
Событие initializeRequest объекта PageRequestManager предоставляет разработчикам возможность отмены постбэка, если есть такая необходимость. Более того, объект PageRequestManager включает в себя функцию, которая будучи выполненной прекращает все частичные постбэки - как те, что на данный момент обрабатываются, так и те, что находятся в очереди. Чтобы продемонстрировать прерывание и отмену постбэков, я создал демо-код похожий на тот, что мы только что рассмотрели. В дополнение к элементу управления Button, я добавил элемент Label в UpdatePanel, который выводит на экран время обновления UpdatePanel. Также я добавил два элемента за пределами UpdatePanel, которые используются для демонстрации возможности прекращения и отмены:
- Элемент управления CheckBox (кнопка с независимой фиксацией ) названный CancelThisPostback , будучи отмеченным, вызывает отмену частичного постбэка
- Кнопка при нажатии отменяет все ожидающие постбэки.
function PageRequestManager_initializeRequest(sender, args) {
logEvent("initializeRequest");
// Если вам необходимо отменить данный постбэк
var cb = document.getElementById('<%=CancelThisPostback.ClientID%>');
if (cb.checked) {
// То отменяем данный запрос постбэка
args.set_cancel(true);
logEvent("Postback canceled");
}
}
Если отмечен флажок CancelThisPostback, частичный постбэк отменяется путем вызова args.set_cancel(true), а также добавляется сообщение в журнал, означающее то, что постбэк был отменен. Чтобы проверить данную функциональность, посетите страницу и нажмите на кнопку "Perform a Partial Postback". Так же, как и до этого, страница проходит через различные шаги, и результат отображен в журнале клиентских обработчиков события. А также время в UpdatePanel заменяется на текущее время. Теперь отметьте флажок "Cancel this postback" и нажмите на кнопку "Perform a Partial Postback". На этот раз частичный постбэк не произойдет.
Следующий скриншот показывает результат при отмеченом флажке "Cancel this postback". Заметьте, что клиентский журнал обработчикав событий имеет всего три записи:
- pageLoaded - это было отображено в момент, когда страница была впервые загружена
- initializeRequest - это сообщение было отображено, когда была нажата кнопка "Perform a Partial Postback", тем самым начиная цикл частичного постбэка
- Postback canceled - постбэк был отменен.

Данный подход позволяет вам отменить текущий частичный постбэк из обработчика события initializeRequest. ASP.NET AJAX Framework также позволяет вам прервать все ожидающие частичные запросы постбэка. Чтобы осуществить это, вызовите функцию abortPostBack() объекта PageRequestManager. Чтобы продемонстрировать данную функциональность, я создал следующую клиентскую функцию, которая выполняется тогда, когда нажата кнопка "Abort Outstanding Partial Page Postbacks".
function AbortAllPostbacks() {
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.abortPostBack();
logEvent("Partial page postbacks aborted");
}
Чтобы проверить данную функциональность, просмотрите данный пример страницы и нажмите кнопку "Perform a Partial Postback" (при этом не отмечайте флажок "Cancel this postback"). Это начнет цикл частичного постбэка. После того, как появится результат UpdateProgress, нажмите на "Abort Outstanding Partial Page Postbacks". Это прекратит текущий частичный постбэк и моментально вызовет событие endRequest. Следующий скриншот показывает клиентский журнал обработчиков событий в то время, когда нажата кнопка "Abort Outstanding Partial Page Postbacks" во время частичного постбэка. Вы можете убедиться, что частичный постбэк стартовал нормально, так как его события initializeRequest и beginRequest были вызваны, но во время обработки на сервере постбэк был прекращен. Это немедленно вызвало событие endRequest.
