2009-01-12 61 views
2

我制作了一个具有以下体系结构的Web应用程序:每个窗体都是一个UserControl,只有一个实际页面(Default.aspx),并且URL中的参数指定要加载哪个UserControl。 UserControl被加载到UpdatePanel中,以便它可以享受完整的AJAX性。ASP.NET AJAX WebForms自定义错误处理问题

我还使用了一个详细的消息显示机制。最终,消息最终会在Default.ASPX顶部的一个指定区域中出现,并带有一些不错的格式化内容。

现在,我还想捕获源自UserControl的任何未处理的异常,并将它显示在这个区域中,并使用我为消息所做的所有铃声和哨子。

我该怎么做?不知何故,Page.Error和ScriptManager.AsyncPostBackError不适用于我...

回答

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 
    } 
} 

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

+0

这是一个想法。但也许我可以在Default.aspx级别上以某种方式做到这一点? – 2009-01-12 10:18:34

0

你可以提供一些你用ScriptManager.AsyncPostBackError试过的更多细节吗?这真的应该是正确的使用。

1

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

我确实使用AsyncPostBackError()将错误消息从泛型“调用的目标引发的异常”更改为真正的错误消息。我的标签设置为错误文本,然后我告诉AJAX,我与

args.set_errorHandled(true); 
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();