2009-06-08 108 views
7

我使用强类型视图,其中所有ViewModel都继承了BaseViewModel类。如何在使用分型视图时在ActionFilterAttribute中设置模型数据

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

现在,我只能访问它像这样:

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

的问题是,我必须知道密钥“视图模型”。最关键的是视图模型,因为在我的控制器我用:

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

是否有存取权限模型一个更安全的方式?

回答

14

OnActionExecuting在Action执行之前工作 - 因此Model被设置为null。你可以在OnActionExecuted访问您的ViewData(或ViewData.Model):

public override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    var model = filterContext.Controller.ViewData.Model as YourModel; 

    ... 
} 

希望这有助于

+0

这是有道理的。我的过滤器的一部分可以访问路由中的值,并且在Action执行之前需要知道。我在OnActionExecuting中仍然有这部分内容。剩下的就在OnActionExecuted。 – 2009-06-08 22:29:29

4

你可以用户也该在OnActionExecuting:

BaseModel model = filterContext.ActionParameters.SingleOrDefault(m => m.Value is BaseModel).Value as BaseModel; 

希望这有助于

1

这是一个老问题,但现在我可以在OnActionExecuting期间访问该模型:

var model = filterContext.ActionParameters["model"] as CustomerModel; 
相关问题