該系統位於Asp.Net MVC 4,C#中。視圖模型構造函數的異常處理(重定向)
如果在執行控制器方法之前拋出異常。我不知道如何處理它 - 我想將用戶重定向到錯誤頁面,但我不能。
我有一個基本的ViewModel類,它包含一個SelectList用於下拉菜單。在它的構造函數中,ViewModel從數據庫中獲取它的SelectListItems。這是異常的來源。
index方法將viewmodel作爲參數。
這是代碼的草圖:
class MyViewModel{ public SelectList SelectListModel { get; set; } public MyViewModel() { List<X> xs = GetItemsFromDB(); // <= Exception thrown here List<SelectListItem> SelectListContent = new List<SelectListItem>(); foreach(X x in xs) { SelectListContent.Add(new SelectListItem(Value = x.value,Text=x.text); } SelectListModel = new SelectList(SelectListContent , "Value", "Text"); } } public class MyController : Controller { public ActionResult Index(MyViewModel model) //<< Exception thrown before entering method { //do something } }
我試圖把一個try-catch的構造器內與在catch下面的代碼:
var context = new HttpContextWrapper(HttpContext.Current);
var rc = new RequestContext(context, new RouteData());
var urlHelper = new UrlHelper(rc);
context.Response.Redirect(urlHelper.Action("Index", "Error", new { messagem = x.Message }), false);
HttpContext.Current.ApplicationInstance.CompleteRequest();
我從其他SO答案中獲得了這個答案,但它不起作用。執行此塊時,用戶不會重定向到錯誤頁面。相反,MyControllers Index方法繼續執行。
您不應該在GET方法中將模型作爲參數。爲什麼在這個世界上你創建了一個'SelectList',然後從它創建另一個重複的。視圖模型不應該有訪問數據庫的代碼。 –
什麼是例外?斯蒂芬: – n1ff
:但現在我有這個問題,你知道一個解決方法嗎?到Niff:例外是打開數據庫失敗(「無法打開數據庫etrc」)。 – galmeida