С панелью обновления Ajax ScriptManager.RegisterStartUpScript не работает, если он помещен в page_onerror - PullRequest
0 голосов
/ 07 сентября 2011

У меня есть требование показывать пользователю окно с предупреждением, когда на уровне страницы возникает какое-то исключение (для разных исключений сообщение отличается).На странице у меня было две панели обновлений и триггеры на основе обновлений.И эта функциональность распространена на разных страницах.Поэтому я создал базовую страницу и попытался обработать исключение в событии page_onerror.И я использую ScriptManager.RegisterStartupScript (...), чтобы показать предупреждение для пользователя.Если я использую один и тот же код вместо сообщения об ошибке в блоке catch, он работает нормально.Но если я выбрасываю исключение и обработку в методе page_error, он не работает ...

(так как я использую панели обновления, я не могу использовать Response.Write для того же.)

Пожалуйстапомогите мне.

Заранее спасибо.

1 Ответ

0 голосов
/ 07 сентября 2011

Жизненный цикл страницы немного отличается в Async Postbacks - вы уверены, что Page_OnError запускается? Если да, то, возможно, событие сработало так поздно, что диспетчер сценариев уже отобразил в выводе зарегистрированные сценарии.

Возможно, вам следует попробовать событие ScriptManager.AsyncPostBackError . Если все, что вы хотите сделать, это показать пользовательское предупреждение об ошибке, тогда настройка ScriptManager.AsyncPostBackErrorMessage должна помочь.

Обычно я использую ScriptManager на главной странице и обрабатывает событие AsyncPostBackError в коде, чтобы отправить назад какое-то пользовательское исключение. На стороне java-скрипта я использую обработчик конца запроса, чтобы показать настраиваемое окно предупреждения. Проверьте пример кода сверху по ссылке MSDN:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function EndRequestHandler(sender, args)
{
     if (args.get_error() != undefined && args.get_error().httpStatusCode == '500')
     {
        var errorMessage = args.get_error().message
        args.set_errorHandled(true);
        ToggleAlertDiv('visible');
        $get(messageElem).innerHTML = '"' + 
          errorMessage + '" ' + errorMessageAdditional;
     }
}
...