UpdatePanel Обработка исключений - PullRequest
15 голосов
/ 01 декабря 2009

Там, где возникают исключения в UpdatePanels, которые я реализовал в веб-приложении ASP.NET, которое я создаю, они вызывают ошибку JavaScript на странице с некоторыми высокоуровневыми выводами ошибок, доступными в предупреждении. Это нормально для разработки, но как только система будет запущена в производство, она, очевидно, будет бесполезна по нескольким причинам. Я могу окружить хлопотные действия с помощью Try Catch и т. Д., Чтобы контролировать ошибку Javascript, но в некоторых случаях я хочу предпринять действия на главной странице и т. Д. Для поддержки взаимодействия с пользователем.

Как правильно обрабатывать ошибки, возникающие в UpdatePanels, чтобы обеспечить бесшовную и безошибочную реализацию Javascript?

Ответы [ 3 ]

19 голосов
/ 01 декабря 2009

Вы можете использовать комбинацию события AsyncPostBackError на ScriptManager (на стороне сервера) и события EndRequest на PageRequestManager (на стороне клиента) для полной обработки ошибок на стороне сервера при использовании UpdatePanel.

Вот пара ресурсов, которые должны вам помочь:

Настройка обработки ошибок для элементов управления ASP.NET UpdatePanel

Настройка обработки ошибок для ASP.NET UpdatePanel

Вот простой пример:

// Server-side
protected void ScriptManager1_AsyncPostBackError(object sender, 
    AsyncPostBackErrorEventArgs e)  {
    ScriptManager1.AsyncPostBackErrorMessage =
        "An error occurred during the request: " +
        e.Exception.Message; 
}


// Client-side
<script type="text/javascript">
  function pageLoad()  {
    Sys.WebForms.PageRequestManager.getInstance().
        add_endRequest(onEndRequest);  
  }

  function onEndRequest(sender, args)  {
    var lbl = document.getElementById("Label1");
    lbl.innerHTML = args.get_error().message;
    args.set_errorHandled(true);
  }
</script>
10 голосов
/ 20 января 2010

Если вы просто хотите исправить ошибку JavaScript в браузере и отобразить сообщение об исключении для пользователя, вам просто нужно добавить это на свою главную страницу где-нибудь после объявления формы:

<!-- This script must be placed after the form declaration -->
<script type="text/javascript">
    Sys.Application.add_load(AppLoad);

    function AppLoad() {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequest);
    }

    function EndRequest(sender, args) {
        // Check to see if there's an error on this request.
        if (args.get_error() != undefined) {

            var msg = args.get_error().message.replace("Sys.WebForms.PageRequestManagerServerErrorException: ", "");

            // Show the custom error. 
            // Here you can be creative and do whatever you want
            // with the exception (i.e. call a modalpopup and show 
            // a nicer error window). I will simply use 'alert'
            alert(msg);

            // Let the framework know that the error is handled, 
            //  so it doesn't throw the JavaScript alert.
            args.set_errorHandled(true);
        }
    }
</script>

Вам не нужно перехватывать OnAsyncPostBackError, даже если вы не хотите настраивать сообщение. Перейдите к моему сообщению в блоге, если вы хотите больше информации об этом.

0 голосов
/ 01 декабря 2009

Не могли бы вы переопределить метод ошибки на уровне страницы, поймать исключение и обработать, как считаете нужным.

protected override void OnError(EventArgs e)
{
    //show error message here
}
...