Asp.net mvc 使用类型化视图时如何在ActionFilterAttribute中设置模型数据
我使用强类型视图,其中所有视图模型都继承一个类BaseViewModel 在装饰所有控制器的ActionFilter中,我希望使用该模型 现在我只能这样访问它:Asp.net mvc 使用类型化视图时如何在ActionFilterAttribute中设置模型数据,asp.net-mvc,Asp.net Mvc,我使用强类型视图,其中所有视图模型都继承一个类BaseViewModel 在装饰所有控制器的ActionFilter中,我希望使用该模型 现在我只能这样访问它: public override void OnActionExecuting(ActionExecutingContext filterContext) { ViewModelBase model = (ViewModelBase)filterContext.ActionParameters["viewM
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
ViewModelBase model = (ViewModelBase)filterContext.ActionParameters["viewModel"];
base.OnActionExecuting(filterContext);
}
问题是,我必须知道关键的“viewModel”。关键是viewModel,因为我在控制器中使用了:
返回
视图(“MyView”,
视图(模型)
有没有更安全的方法来访问模型?OnActionExecuting在您的操作执行之前工作-因此模型被设置为null。您可以在OnActionExecuted中访问ViewData(或ViewData.Model):
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var model = filterContext.Controller.ViewData.Model as YourModel;
...
}
希望这有帮助您也可以在OnActionExecuting中使用它:
BaseModel model = filterContext.ActionParameters.SingleOrDefault(m => m.Value is BaseModel).Value as BaseModel;
var model = filterContext.ActionParameters["model"] as CustomerModel;
希望这有帮助这是一个老问题,但现在我可以在执行过程中访问模型:
BaseModel model = filterContext.ActionParameters.SingleOrDefault(m => m.Value is BaseModel).Value as BaseModel;
var model = filterContext.ActionParameters["model"] as CustomerModel;
这是有道理的。我的筛选器的一部分可以访问路由中的值,并且在执行操作之前需要知道这些值。我现在还有这个角色。其余的都在执行中。