Изменение текста метки в Global.asax

У меня есть зона сообщения, определенная на главной странице (панель обновления с меткой внутри). Я хочу обработать все исключения глобально, и я подумал, что могу перехватить их в событии Application_Error в Global.asax и оттуда изменить текст метки и обновить панель. Но текст не обновляется, возможно потому, что я не правильно понимаю жизненный цикл страницы. Можно ли изменить текст метки в событии application_error? Это мой код:

void DisplayErrorOnPage(AppException myEx)
{
    System.Web.UI.Page page = System.Web.HttpContext.Current.Handler
        as System.Web.UI.Page;
    if (page != null)
    {
        Label ErrorLabel = page.Master.Master.FindControl("StatusMessage") 
                               as Label;
        ErrorLabel.Text = myEx.Message;
        UpdatePanel up = page.Master.Master.FindControl("StatusMessagePanel") 
                             as UpdatePanel;
        up.Update();
    }
}

void Application_Error(object sender, EventArgs e)
{
    Exception myEx = Server.GetLastError().GetBaseException();

    //if it's a controlled exception, display it on the current page
    //otherwise redirect to an error page
    if (myEx is AppException)
    {
        if (((AppException)myEx).RedirectToErrorPage)
            RedirectToErrorPage(myEx);
        else
            DisplayErrorOnPage((AppException)myEx);
    }
    else
    {
        RedirectToErrorPage(myEx);
    }
}

В Site.Master зона сообщения определяется следующим образом:

<asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="StatusMessagePanel">
    <ContentTemplate>
        <asp:Label runat="server" ID="StatusMessage" Text="Message zone" />
    </ContentTemplate>
</asp:UpdatePanel>

1 ответ

Все возможно, а почему текст не обновляется? Может быть что-то не так с вашей реализацией ajax, и вы получите лучшие ответы, если добавите код своей страницы! но знаете ли вы, что Application_Error - это механизм управления состоянием на уровне приложения? Поэтому будьте осторожны, используя событие Application_Error, чтобы перехватывать ошибки уровня приложения, а не ошибки уровня пользователя!

Другие вопросы по тегам