我使用强类型视图,其中所有viewmodel都继承了一个类Baseviewmodel.
在装饰所有控制器的ActionFilter中,我想使用Model.
现在我只能像这样访问它:
public override void OnActionExecuting(ActionExecutingContext filterContext) { viewmodelBase model = (viewmodelBase)filterContext.ActionParameters["viewmodel"]; base.OnActionExecuting(filterContext); }
问题是,我必须知道密钥“viewmodel”.关键是viewmodel,因为在我的控制器中我用过:
return
View(“MyView”,
viewmodel)
是否有更安全的方式来访问模型?
解决方法
OnActionExecuting在Action执行之前工作 – 因此Model被设置为null.您可以在OnActionExecuted中访问ViewData(或ViewData.Model):
public override void OnActionExecuted(ActionExecutedContext filterContext) { var model = filterContext.Controller.ViewData.Model as YourModel; ... }
希望这可以帮助