2010年10月3日 星期日

Other Way For Setting Customer Error Page in MVC2

本文舉出3種方法去控制MVC2中,如何自訂Error Page,釐清在各個View中加入專屬於某個View的自訂Error page,或者是整個系統共用一個自訂Error Page的實際作法,一般微軟官方文件或其它技術Blog中並沒有針對這點加以整理與說明。


方法一:整個系統共用一個自訂Error Page


步驟如下:
1.建立共同的error page,在/Views/Shared/Error.aspx。
2.在相對的controller的class上加上[HandleError],然後並不用指明要將錯誤頁導到哪一個error.aspx中,系統會自動導到/Views/Shared/Error.aspx。

   1:  [HandleError]
   2:  public class ProductController : Controller
   3:  { }

3.Web.config上

   1:  <customErrors mode="RemoteOnly" defaultRedirect="/Views/Shared/Error.aspx">
   2:  </customErrors>

測試的時候,<customErrors mode="RemoteOnly" ...>請改為<customErrors mode="On" ...>。

4.則此時有錯誤產生系統先將錯誤頁導到/Views/Shared/Error.aspx。


方法二:每個Views目錄內設定專屬的自訂Error page


步驟如下:
1.每個Views目錄內各自加上Error.aspx,如Views/Product/Error.aspx或Views/CustomerError.aspx。
2.在相對的controller的class上加上[HandleError(Vies="Error")]。


   1:  [HandleError(Vies="Error")]
   2:  public class ProductController : Controller
   3:  { }

3.Web.config上

   1:  <customErrors mode="RemoteOnly" defaultRedirect="/Views/Shared/Error.aspx">
   2:  </customErrors>

測試的時候,<customErrors mode="RemoteOnly" ...>請改為<customErrors mode="On" ...>。

4.則此時有錯誤產生系統先將錯誤頁導到Views/Product/Error.aspx。


方法三:在Action內指明專屬的自訂Error page


步驟如下:
1.每個Views目錄內各自加上Error.aspx,如Views/Product/Error.aspx或Views/CustomerError.aspx
2.在相對的controller內每個method中加上try .... catch,如下範例:

   1:  public ActionResult Create(FormCollection collection)
   2:  {
   3:      try
   4:      {            
   5:          //處理Create Product
   6:      }
   7:      catch (Exception ex)
   8:      {
   9:          ViewData["msg"] = ex.Message + " " + ex.InnerException;
  10:          return View("Error");
  11:      }
  12:  }

3.則此時有錯誤產生系統先將錯誤頁導到Views/Product/Error.aspx。

希望上述實作經驗中的範例可以對大家在MVC的自訂Error page能有所幫助。

沒有留言:

張貼留言