mvc大写模型vs小写模型

Par*_*osh 21 asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我正在开发一个MVC 5项目,对MVC来说很新.我在代码中注意到这一行:

@Html.DropDownListFor(model => model.ContractorId, Model.Contractors)
Run Code Online (Sandbox Code Playgroud)

页面顶部的指令是:

@model Project.Models.ContractViewModel
Run Code Online (Sandbox Code Playgroud)

ContractViewModel类中有一个Contractors对象.

public IEnumerable<SelectListItem> Contractors
Run Code Online (Sandbox Code Playgroud)

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

Ehs*_*jad 35

模型实际上代表那是你的类的实例模型和模型是lambda表达式的别名.

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

当你编写一个html帮助器时,你需要为它写一个别名,它不是必须写的model你可以写任何东西.

例如:

@Html.DropDownListFor(m=> m.ContractorId, Model.Contractors)
Run Code Online (Sandbox Code Playgroud)

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

当你@model Project.Models.ContractViewModel在View的顶部写一个不同的东西时,在这种情况下我们定义了它将采用的视图模型Project.Models.ContractViewModel,实际上我们的视图现在被强类型化为类的实例Project.Models.ContractViewModel.