Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 使用类型化视图时如何在ActionFilterAttribute中设置模型数据_Asp.net Mvc - Fatal编程技术网

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

Asp.net mvc 使用类型化视图时如何在ActionFilterAttribute中设置模型数据,asp.net-mvc,Asp.net Mvc,我使用强类型视图,其中所有视图模型都继承一个类BaseViewModel 在装饰所有控制器的ActionFilter中,我希望使用该模型 现在我只能这样访问它: public override void OnActionExecuting(ActionExecutingContext filterContext) { ViewModelBase model = (ViewModelBase)filterContext.ActionParameters["viewM

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

在装饰所有控制器的ActionFilter中,我希望使用该模型

现在我只能这样访问它:

    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;

这是有道理的。我的筛选器的一部分可以访问路由中的值,并且在执行操作之前需要知道这些值。我现在还有这个角色。其余的都在执行中。