OnActionExecuting在开始行动之前添加到模型

9 c# modelbinders action-filter asp.net-mvc-3

我有以下内容:

 public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);

        if (filterContext == null)
        {
            throw new ArgumentNullException("filterContext");
        }

        var model = filterContext.Controller.ViewData.Model as BaseViewModel;

        if (model == null)
        {
            model = new BaseViewModel();
            filterContext.Controller.ViewData.Model = model;
        }

        model.User = (UserPrincipal)filterContext.HttpContext.User;
        model.Scheme = GetScheme();
    }
Run Code Online (Sandbox Code Playgroud)

现在逐步完成我可以看到模型上的用户和方案正在填充.

当我开始行动但是他们都是空的?

我在这做错了什么?

除此之外,这是添加到模型的正确方法吗?

这是控制器代码:

[InjectStandardReportInputModel]
public ActionResult Header(BaseViewModel model)
{
    //by this point model.Scheme is null!!

}
Run Code Online (Sandbox Code Playgroud)

arc*_*hil 7

Controller.ViewData.Model没有填充asp.net mvc中的动作参数.该属性用于将数据从操作传递到视图.

如果由于某种原因你不想使用自定义Model Binder(这是在asp.net-mvc中填充动作参数的标准的,推荐的方式),你可以使用ActionExecutingContext.ActionParameters属性

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.ActionParameters["model"] = new BaseViewModel();
        // etc
    }
Run Code Online (Sandbox Code Playgroud)