mvc大写模型vs小写模型

时间:2014-04-25 12:58:37

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我正在开发MVC 5项目,这是MVC的新手。我注意到代码中的这一行:

@Html.DropDownListFor(model => model.ContractorId, Model.Contractors)

页面顶部的指令是:

@model Project.Models.ContractViewModel

ContractViewModel类中有一个Contractors对象。

public IEnumerable<SelectListItem> Contractors

我对资本M(Model.Contractors)有点困惑,Model总是引用@model中传递的对象吗?那么使用Model.Contractors和model.Contractors有什么区别?

1 个答案:

答案 0 :(得分:35)

模型实际上代表了模型类的实例,而model是lambda表达式的别名。

当您在视图中编写@Model时,您正在使用从Controller操作传递的ContractViewModel对象,如果它未从View传递,则它可以为null并且访问Model的任何属性都可以抛出空引用异常并写Model.Contractors你基本上是ContractViewModel.Contractors

当你编写一个html帮助器时,你需要为它编写一个别名,写入model并不是强制性的,你可以写任何东西。

例如:

@Html.DropDownListFor(m=> m.ContractorId, Model.Contractors)

它只是访问 Html Helper 中的模型属性的别名。

当您在View的顶部写@model Project.Models.ContractViewModel时,这是另一回事,在这种情况下,我们定义的视图模型将采用Project.Models.ContractViewModel的实例,实际上我们的视图现在是强烈的键入类Project.Models.ContractViewModel的实例。