所以,我在 MVC3 中的一个以前的项目中看到了这个工作,所以想知道是否 a)我把它搞砸了,或者 b)MVC4 正在做一些不同的事情(看不到它会是)。
我有一个模型绑定 Razor 视图,它提交给控制器操作方法(与 MVC 一样)
后期操作方法:
[HttpPost]
[AutoMap(typeof(MyViewModel), typeof(MyDomainObj))]
public void PostAction(MyDomainObj obj)
{... etc.. etc..
动作过滤器最终会做这样的事情:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var model = filterContext.Controller.ViewData.Model;
注意:在 Jimmy Bogard 的示例中,他使用了我也尝试过的 OnActionExecuted。
我遇到的关键问题是,在我们从上下文中获取“模型”变量的地方,它是空的。如果我在调试时查看 filterContext.ActionParameters 我可以看到一个 MyDomainObj 实例!这似乎(因为它恰好有一个与 MyViewModel 类型相同的道具名称)已从我的表单数据映射!
所以.. 是的,如果我将 MyViewModel 类型作为此方法的参数,那么参数将从提交的表单中正确填充。但。我不想那样做,我想(并且之前根据 JB 的简洁操作方法做过)将视图模型转换为域模型作为执行/执行操作的一部分,然后能够在我的域模型。
摘要 - 为什么我的 ViewData.Model 在后操作过滤器上为空?