该系统位于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