我正在开发一个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.Contractors和model.Contractors之间有什么区别?
解决方法
模型实际上表示一个类的实例,它是您的模型,而模型是lambda表达式的别名.
当您在视图中编写@Model时,您正在使用从Controller操作传递的Contractviewmodel对象,如果未从View传递,则可以为null,并访问Model的任何属性都可以抛出Null参考异常并写入Model.Contractors基本上意味着Contractviewmodel.Contractors
当你编写一个html帮助器时,你需要为它写一个别名,它不是强制写模型,你可以写任何东西.
例如:
@Html.DropDownListFor(m=> m.ContractorId,Model.Contractors)
访问Html Helper中的模型属性只是一个别名.
当您在View的顶部写入@model Project.Models.Contractviewmodel是另一回事,在这种情况下,我们定义了将采用Project.Models.Contractviewmodel实例的视图模型,实际上我们的视图现在是强类型的到Project.Models.Contractviewmodel类的实例.