ASP.NET AJAX WebForms自定义错误处理问题

时间:2009-01-12 09:53:25

标签: asp.net ajax error-handling

我创建了一个具有以下体系结构的Web应用程序:每个表单都是UserControl,只有一个实际页面(Default.aspx),URL中的参数指定要加载的UserControl。 UserControl加载到UpdatePanel中,以便它可以享受完整的AJAX。

我还使用了一个精心设计的消息显示机制。最终消息最终出现在Default.ASPX顶部的一个指定区域,并带有一些很好的格式化内容。

现在,我还想捕获源自UserControl的任何未处理的异常,并将其显示在此区域中,其中包含我为消息制作的所有铃声和口哨声。

我该怎么做? Page.Error和ScriptManager.AsyncPostBackError以某种方式对我不起作用......

4 个答案:

答案 0 :(得分:1)

完整的答案在我的博文中发布 - Unhide Exceptions Hidden By AJAX

我确实使用AsyncPostBackError()将错误消息从通用“调用目标抛出异常”更改为真实错误消息。我为错误文本设置了一个标签,然后告诉AJAX我用

处理了错误
args.set_errorHandled(true);

答案 1 :(得分:0)

我不确定您的主页上的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
   }
}

然后更改所有用户控件以继承此类。

答案 2 :(得分:0)

您能否详细介绍一下您使用ScriptManager.AsyncPostBackError尝试过的内容?这应该是正确的选择。

答案 3 :(得分:0)

对于未处理的错误,请查看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();