2014-04-25 146 views
18

我正在开发一个MVC 5项目,对于MVC来说很新。我注意到这行代码:mvc大写模型vs小写模型

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

在页面顶部的指令是:

@model Project.Models.ContractViewModel 

的ContractViewModel类确实有一个承包商在它的对象。

public IEnumerable<SelectListItem> Contractors 

我只是对资本M(Model.Contractors)有点糊涂,不模型总是指在@model传递的对象?那么使用Model.Contractors和model.Contractors有什么区别?

+2

第一行仅使用模型作为lambda表达式。 '@ H​​tml.DropDownListFor(m => m.ContractorId,Model.Contractors)'偶'@ Html.DropDownListFor(我自己=> myself.ContractorId,Model.Contractors)'也是正确的。 –

回答

32

模型实际上代表的是您的模型的类的一个实例,model是lambda表达式的别名。

当你写在您的视图@Model您使用的是从控制器操作传递的ContractViewModel对象,如果不从View通过它可以为空和访问模型的任何财产可以抛出空引用异常和写Model.Contractors你基本上的意思是ContractViewModel.Contractors

当你写一个html助手你需要为它写一个别名,它不是必须写的model你可以写任何东西。

例如:

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

这只是访问内部HTML辅助模型属性的别名。

当你在浏览的顶部这是一个不同的事情,在这种情况下,我们定义的视图,它将采取的Project.Models.ContractViewModel情况下,实际上我们认为现在是强类型,以Project.Models.ContractViewModel类的实例模型写@model Project.Models.ContractViewModel