我使用强类型视图,其中所有ViewModel都继承了一个类BaseViewModel。
在装饰所有控制器的ActionFilter中,我想使用Model。
现在我只能这样访问它:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
ViewModelBase model = (ViewModelBase)filterContext.ActionParameters["viewModel"];
base.OnActionExecuting(filterContext);
}
问题是,我必须知道密钥“viewModel”。关键是viewModel,因为在我的控制器中我用过:
返回 视图( “MyView的”, 视图模型)
是否有更安全的方式来访问模型?
答案 0 :(得分:14)
OnActionExecuting在您的Action执行之前工作 - 因此Model被设置为null。您可以在OnActionExecuted:
中访问ViewData(或ViewData.Model)public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var model = filterContext.Controller.ViewData.Model as YourModel;
...
}
希望这有帮助
答案 1 :(得分:4)
您也可以在OnActionExecuting中使用它:
BaseModel model = filterContext.ActionParameters.SingleOrDefault(m => m.Value is BaseModel).Value as BaseModel;
希望这有帮助
答案 2 :(得分:1)
这是一个老问题,但现在我可以在OnActionExecuting期间访问该模型:
var model = filterContext.ActionParameters["model"] as CustomerModel;