嗨,我有我的mvc应用程序和这个代码片段:
protected override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
ActionInvoker.InvokeAction(filterContext, "ErrorMessage");
}
public ActionResult ErrorMessage(ExceptionContext filterContext)
{
ViewModel<Exception> viewModel = ViewModelFactory.CreateFor(filterContext.Exception);
return View(viewModel);
}
问题是我不能传递参数给方法。我认为它应该是这个filterContext,但是在ErrorMessage方法中它有所有的默认值。
所以我的问题是-如何传递一些值的方法,我调用?
我不知道从我的问题中是否清楚,但我想要实现的是,我不想在我的控制器动作中捕获任何异常,并且仍然得到关于错误的好看消息。满足我的解是:
protected override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
TempData.Add(MyCommons.Exception, filterContext.Exception);
var controllerName = filterContext.RequestContext.RouteData.Values["Controller"];
filterContext.Result =
new RedirectToRouteResult(new RouteValueDictionary(new {controller = controllerName, action = "Error"}));
filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.Clear();
}
不要将参数传递给被调用的操作,而是使用模型绑定。
如果你想从默认的模型绑定源(query, form, route…)中传递一些自定义参数,把它们包装在一些类中,并为它实现你的自定义模型绑定(或valueprovider,但我认为modelbinder在这里更合适)。