Пользовательский вопрос обработки ошибок ASP.NET AJAX WebForms - PullRequest
2 голосов
/ 12 января 2009

Я создал веб-приложение со следующей архитектурой: каждая форма является UserControl, есть только одна фактическая страница (Default.aspx), а параметр в URL-адресе указывает, какой UserControl загружать. UserControl загружается в UpdatePanel, чтобы он мог наслаждаться полным доступом AJAX.

Существует также сложный механизм отображения сообщений, который я использую. В конце концов сообщения попадают в одну назначенную область поверх Default.ASPX с некоторыми хорошими возможностями форматирования и n.

Теперь я также хотел бы перехватить все необработанные исключения, возникающие в UserControl, и отобразить их в этой области со всеми прибамбасами, которые я сделал для сообщений.

Как я могу это сделать? Page.Error и ScriptManager.AsyncPostBackError почему-то у меня не работают ...

Ответы [ 4 ]

1 голос
/ 04 февраля 2010

Полный ответ в моем блоге - Показать скрытые исключения AJAX .

Я использую AsyncPostBackError (), чтобы заменить сообщение об ошибке с общего «Исключение было сгенерировано целью вызова» на настоящее сообщение об ошибке. Я устанавливаю метку для текста ошибки, а затем говорю AJAX, что обработал ошибку с помощью

args.set_errorHandled(true);
0 голосов
/ 19 мая 2010

Необработанные ошибки смотрите в файле Global.asax ...

protected void Application_Error(object sender, EventArgs e)
{

    //  fired when an unhandled error occurs within the application.
    //  ..or use an HttpModule instead
}

или создайте собственный модуль HttpModule вместо этого, чтобы подключить свой web.config ...

public class UnhandledExceptionModule : IHttpModule
{
    #region IHttpModule Members
    public void Dispose()
    {
    }

    public void Init(HttpApplication app)
    {           
        app.Error += new EventHandler(app_Error);
    }

    protected void app_Error(object sender, EventArgs e)
    {
        HttpApplication app = sender as HttpApplication;
                Exception ex =  app.Server.GetLastError().GetBaseException();
0 голосов
/ 10 февраля 2009

Можете ли вы рассказать подробнее о том, что вы пробовали с ScriptManager.AsyncPostBackError? Это действительно должно быть правильно использовать.

0 голосов
/ 12 января 2009

Я не уверен, что вы имели в виду Page.Error на вашей главной странице не работает или на самих пользовательских элементах управления. Если вы еще этого не сделали, попробуйте создать следующий класс:

public class CustomUserControl : UserControl
{
   public new CustomUserControl
   {
      this.Error += new EventHandler(Page_Error);
   }

   protected void Page_Error(object source, EventArgs e)
   {
      Exception exception = HttpContext.Current.Server.GetLastError();
      // Message away
   }
}

Затем измените все пользовательские элементы управления, чтобы вместо этого наследовать этот класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...