Изменение текста метки в 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, чтобы перехватывать ошибки уровня приложения, а не ошибки уровня пользователя!