我正在做一个MVC5项目,对MVC来说非常陌生。我注意到代码中的这一行:
@Html.DropDownListFor(model => model.ContractorId, Model.Contractors)
页面顶部的指令是:
@model Project.Models.ContractViewModel
ContractViewModel类中确实有一个Contractors对象。
public IEnumerable<SelectListItem> Contractors
我只是对大写的M (Model.Contractors)有点困惑,模型总是引用传递到@模型中的对象吗?那么使用model.Contractors和Model.Contractors有什么区别呢?
发布于 2014-04-25 21:00:42
lambda模型实际上表示类的一个实例,即您的模型模型,而是表达式的别名。
当您在视图中编写@Model
时,您使用的是从控制器操作传递的ContractViewModel
对象,如果它不是从视图传递的,则它可以为空,并且访问模型的任何属性都会抛出空引用异常,而编写Model.Contractors
您基本上是指ContractViewModel.Contractors
当你编写一个model
助手时,你需要为它写一个别名,这不是强制性的,你可以写任何东西。
例如:
@Html.DropDownListFor(m=> m.ContractorId, Model.Contractors)
它只是一个别名,用于访问Html Helper中的模型属性。
当你在视图顶部编写@model Project.Models.ContractViewModel
时,这是一件不同的事情,在这种情况下,我们定义了视图的模型,它将采用Project.Models.ContractViewModel
的实例,实际上我们的视图现在强类型化为Project.Models.ContractViewModel
类的实例。
https://stackoverflow.com/questions/23293886
复制相似问题