我正在开发一个 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有什么区别呢?
最佳答案
型号 实际上代表您的类的一个实例 型号 和模型是 lambda 表达式的别名。
当你写 @Model
在您看来,您正在使用 ContractViewModel
的对象这是从 Controller Action 传递过来的,如果不是从 View 传递过来的,它可以为空,访问模型的任何属性都可以抛出 空引用异常 和写作 Model.Contractors
你的意思是ContractViewModel.Contractors
当你写一个 html helper 时,你需要为它写一个别名,写 model
不是强制性的。你可以写任何东西。
例如:
@Html.DropDownListFor(m=> m.ContractorId, Model.Contractors)
它只是访问 中的模型属性的别名。 Html 助手 .
当你写
@model Project.Models.ContractViewModel
在 View 的顶部是另一回事,在这种情况下,我们定义了 View 模型,它将采用 Project.Models.ContractViewModel
的实例。 ,实际上我们的 View 现在被强类型化为类 Project.Models.ContractViewModel
的实例.
关于asp.net - mvc 大写模型与小写模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23293886/