使用类型化视图时如何在ActionFilterAttribute中设置模型数据

时间:2009-06-08 14:49:50

标签: asp.net-mvc

我使用强类型视图,其中所有ViewModel都继承了一个类BaseViewModel。

在装饰所有控制器的ActionFilter中,我想使用Model。

现在我只能这样访问它:

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        ViewModelBase model = (ViewModelBase)filterContext.ActionParameters["viewModel"];
        base.OnActionExecuting(filterContext);
   }

问题是,我必须知道密钥“viewModel”。关键是viewModel,因为在我的控制器中我用过:

  

返回   视图( “MyView的”,   视图模型)

是否有更安全的方式来访问模型?

3 个答案:

答案 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;