我只是不理解这个简单的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?
答案 0 :(得分:1)
你是说这个吗?:
@Html.TextBoxFor(m.CompanyName)
而不是这个?:
@Html.TextBoxFor(m => m.CompanyName)
因为那些意味着两个非常不同的东西。第一个(您想要使用的那个)并没有告诉TextBoxFor()
关于模型的任何信息。它只传递一个字符串值。因此,生成的文本框将只有 要使用的字符串值,而不包含属性或拥有该属性的模型。没有模型注释,没有验证,没有。它与此完全相同:
@Html.TextBoxFor("My Company Name")
哎呀,它甚至无法告诉input
name
属性使用什么,这意味着在发布时无法绑定模型表单返回服务器操作。
代码中使用的实际版本没有传递属性的值,它传递一个引用属性本身的表达式:
m => m.CompanyName
所以TextBoxFor()
知道模型类型,属性类型,注释等等。这样它就可以使用对框架有用的任何其他信息,如验证,有用的消息,类型检查等。