MVC Linq vs Model Dot表示法

时间:2016-08-09 18:40:24

标签: asp.net asp.net-mvc razor view

我只是不理解这个简单的MVC视图的几个概念:

@model Models.Company

<h2>Index</h2>

@Html.TextBoxFor(m => m.CompanyName)
<br />

@Html.DropDownListFor(m => m.Departments, new SelectList(Model.Departments, "Id", "Name"), "Select Department")

请注意,Model.Departments是Company对象的一个​​属性,它返回一个List对象。

我知道View的模型是Company对象。我最不理解的是为什么LINQ用于填充TextBox的名称,为什么它被用作DropDownList的名称以及为什么Model Dot Departments用于SelectList。

为什么不使用Model.CompanyName和Model.Departments?为什么要引入LINQ?

1 个答案:

答案 0 :(得分:1)

你是说这个吗?:

@Html.TextBoxFor(m.CompanyName)

而不是这个?:

@Html.TextBoxFor(m => m.CompanyName)

因为那些意味着两个非常不同的东西。第一个(您想要使用的那个)并没有告诉TextBoxFor()关于模型的任何信息。它只传递一个字符串值。因此,生成的文本框将只有 要使用的字符串值,而不包含属性或拥有该属性的模型。没有模型注释,没有验证,没有。它与此完全相同:

@Html.TextBoxFor("My Company Name")

哎呀,它甚至无法告诉input name属性使用什么,这意味着在发布时无法绑定模型表单返回服务器操作。

代码中使用的实际版本没有传递属性的值,它传递一个引用属性本身的表达式:

m => m.CompanyName

所以TextBoxFor()知道模型类型,属性类型,注释等等。这样它就可以使用对框架有用的任何其他信息,如验证,有用的消息,类型检查等。