asp.net - mvc 大写模型与小写模型

标签 asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我正在开发一个 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/

相关文章:

asp.net - 发送电子邮件,但不是现在

ASP.NET 用户控件和 jQuery 对话框

c# - 从 .Master Page 中删除 gridview 编辑列

c# - 具有非唯一值的 DropDownList 搞砸了 View 状态/回传

c# - ASP.NET MVC 2 Html.TextAreaFor Html.TextArea 奇怪的绑定(bind)

asp.net - 自定义组件和 ASP.NET MVC

asp.net-mvc - 获取 mvc 4 上的当前文化或浏览器区域设置

asp.net-mvc-3 - 第一页加载缓慢 - ASP.NET MVC

c# - Fluent 验证中的本地化消息 (MVC3)

asp.net-mvc-3 - MVC 3 Cookie 不起作用