Обработка исключений UpdatePanel

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

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

Ответы

Ответ 1

Вы можете использовать комбинацию события 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>

Ответ 2

Я написал здесь про более простой способ сделать это: http://www.wagnerdanda.me/2010/01/asp-net-ajax-updatepanel-error-exception-handling-the-simple-way/

Если вы просто хотите исправить ошибку JavaScript в 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 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, даже если вы не хотите настраивать сообщение. Перейдите к моему сообщению в блоге, если вы хотите получить дополнительную информацию об этом.

Ответ 3

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

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