2009-01-12 64 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();