ASP.NET AJAX UpdatePanel - отмена обратной передачи в InitializeRequest не приведет к повторному включению - PullRequest
4 голосов
/ 13 октября 2010

Внутри ASP.NET AJAX UpdatePanel на моей странице у меня есть кнопка отправки, к которой применена некоторая пользовательская проверка JavaScript, которая устанавливает глобальный флаг _cancelGeneralSettingsUpdate в зависимости от результатов проверки.

Все работает, если толькоВы вводите неверное значение, исправляете его и повторно отправляете.В этом случае переменная _cancelGeneralSettingsUpdate правильно установлена ​​на false, но функция initializeRequest не вызывается до того, как страница пытается выполнить обратную передачу через AJAX, что приводит к сбою обратной передачи.

Мне нужно, чтобы постбэки были успешными после того, как неверный ввод был исправлен, и пользователь снова нажимает кнопку отправки.К сожалению, после отмены обратной передачи я, похоже, неправильно подключен к конвейеру PageRequestManager.Если я обновляю страницу, все снова работает, но отмена обратной передачи через args.set_cancel(true); переводит меня в состояние, в котором я не могу делать дополнительные обратные передачи через AJAX до тех пор, пока страница не будет обновлена.

Как я могу повторно включитьпостбэки или вызовет initializeRequest и установил его перед последующими постбэками?

Я прикрепил часть своего кода.Предположим, что _cancelGeneralSettingsUpdate установлен правильно перед любой попыткой обратной передачи, как я это проверил.

var _cancelGeneralSettingsUpdate = false;

function initializeRequest(sender, args) {
        var pageRequestManager = Sys.WebForms.PageRequestManager.getInstance();
        if (!pageRequestManager.get_isInAsyncPostBack() & args.get_postBackElement().id == '<%= UpdateWorkgroupGeneralButton.ClientID %>')
        {
            if (_cancelGeneralSettingsUpdate) {
                args.set_cancel(true);
                // Show error message
            }
            else {
                args.set_cancel(false);
            }
        }
        else {
            args.set_cancel(false);
        }
    }

1 Ответ

2 голосов
/ 13 октября 2010

Мысль Я нашел решение. В моем случае, правильная вещь - вызывать эту функцию, когда моя проверка JavaScript не удалась

 Sys.WebForms.PageRequestManager.getInstance().abortPostBack();

В моем примере выше я звонил args.set_cancel(false); в пользовательском обработчике initializeRequest. Хотя это работало для первого экземпляра, оно не позволяло будущим постбэкам завершиться успешно после того, как пользователь исправил неправильный ввод и попытался повторно отправить форму.

Это фактически прервет только обратные передачи, которые в данный момент находятся в полете. В моем случае __doPostBack(...) еще не был вызван, поэтому Sys.WebForms.PageRequestManager.getInstance().abortPostBack(); молча не смог сделать то, что я ожидал.

Конечным результатом было использование двухкнопочной системы. Без исправления ошибки библиотеки AJAX это был единственный разумный вариант.

...