2017-01-13 44 views
0

假設我有一個web窗體,並且上面有一些標籤和文本框。 webform還有一個gridview來讀取xml文件。比方說,我鍵入擰文件名:如何在asp.net中捕捉Page_Error時繼續頁面顯示

protected void Page_Load(object sender, EventArgs e) 
{ 
    DataSet DS = new DataSet(); 
    DS.ReadXml(Server.MapPath("~/wrongfilename.xml")); // raise an error 
    GridView1.DataSource = DS; 
    GridView1.DataBind(); 
} 

,這是頁面錯誤處理程序:

protected void Page_Error(object sender, EventArgs e) 
{ 
    Exception ex = Server.GetLastError(); 
    Server.ClearError(); 
} 

所以我實際處理此錯誤,並清除此錯誤。所以gridview沒有數據可以顯示,夠公平的。但是當我執行程序時,頁面仍然是一個空白頁面,我認爲我應該至少獲得文本框,標籤顯示爲空的gridview,但它只是一個空白頁面。爲什麼頁面沒有顯示其他組件以及如何顯示其他組件?

回答

1

如果您試圖忽略錯誤,則您在Page_Error中編寫的代碼是錯誤的解決方法。一旦你到達Page_Error,爲了補救發生錯誤的頁面的渲染已經太遲了。應該使用Page_Error來優雅地處理意外的異常,例如記錄錯誤和/或將它們重定向到錯誤頁面。

如果您希望您的網頁繼續加載錯誤之後解析您的XML,我建議你需要....

protected void Page_Load(object sender, EventArgs e) 
{ 
    DataSet DS = new DataSet(); 
    try 
    { 
     DS.ReadXml(Server.MapPath("~/wrongfilename.xml")); // raise an error 
    } 
    catch(Exception ex) 
    { 
     // error handling 
    } 
    GridView1.DataSource = DS; 
    GridView1.DataBind(); 
} 

注:通常我會趕上你可能期望在正常運行的具體例外的程序,捕獲Exception類型的異常是不可取的。我已經使用了Exception類型,因爲你沒有指定你正在接收的那個Exception,你試圖處理。閱讀更多...

Why not catch general Exceptions