是否自动实例化了动作方法的缺少对象参数?

时间:2016-03-25 11:54:17

标签: asp.net-mvc

考虑以下viewmodel,view和action方法,没有其他同名的操作方法:

视图模型

public class ViewModel
{  
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
    //...
}

视图

@model Project.Models.ViewModel
*@...@*

行动方法

public ActionResult ActionMethod(ViewModel vm) {
        return View(vm);
    }

为什么在请求视图而不传入视图模型时,请求实际上成功了?
我预计"资源无法找到错误"如果实际找到了动作方法,我希望将vm指定为null,但是当我检查时,视图模型实际上是实例化的。

我读了execution processrouting,但我觉得没什么更聪明的。实例化是由DefaultModelBinder执行还是我完全遗漏了其他东西?

1 个答案:

答案 0 :(得分:1)

我很确定DefaultModelBinder这样做。 MVC 1确实通过了null,但这种行为已经改变了。没有配置选项可以更改此内容。

HTTP协议在其请求数据中无法指定模型是否应为null或实例化。这种区别与任何协议元素都不对应。因此,MVC必须选择其中一种替代方案。