考虑以下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 process和routing,但我觉得没什么更聪明的。实例化是由DefaultModelBinder执行还是我完全遗漏了其他东西?
答案 0 :(得分:1)
我很确定DefaultModelBinder
这样做。 MVC 1确实通过了null
,但这种行为已经改变了。没有配置选项可以更改此内容。
HTTP协议在其请求数据中无法指定模型是否应为null或实例化。这种区别与任何协议元素都不对应。因此,MVC必须选择其中一种替代方案。