本文舉出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.建立共同的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.每個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.每個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能有所幫助。
沒有留言:
張貼留言