我刚刚开始学习 MVC4,我必须承认我对 lambda 表达式、泛型和匿名类型的所有依赖有点挑战,尤其是当有许多重载函数时。尝试理解 HTML Helpers 的工作原理有点令人困惑。以“DropDownListFor”Helper 为例。我试图从我的代码中提取要领。这就是为什么您在表格中只看到一个“性别”列。希望它在语法上仍然正确:
@model IEnumerable<BusinessLayer.Employee>
<table>
@foreach (var employee in Model)
{
<tr>
<td>
@{
var listItems = new List<SelectListItem>()
{
new SelectListItem {Text = "Male", Value = "M"},
new SelectListItem {Text = "Female", Value = "F"}
};
@Html.DropDownListFor(m => employee.Gender, listItems, listItems.Find(i => i.Value == employee.Gender).Text)
}
</td>
</tr>
}
</table>
Model对象中有两个Employees,一个Employee的IEnumerable,生成如下HTML
<table>
<tr>
<td>
<select id="employee_Gender" name="employee.Gender"><option value="">Male</option>
<option value="M">Male</option>
<option value="F">Female</option>
</select>
</tr>
</td>
<select id="employee_Gender" name="employee.Gender"><option value="">Female</option>
<option value="M">Male</option>
<option value="F">Female</option>
</select>
</td>
</table>
查看 DropDownListFor 方法的第一个参数,
@Html.DropDownListFor(m => employee.Gender, ...
...我是否正确理解“m”代表传递给视图的模型类的实例?在我看到的在线示例中,我看到了“m”似乎是指模型类但模型是单个实例类的示例,例如,单个 Employee 对象,而不是Employees 的集合在这种情况下,我想显示员工的表格列表。我假设 DropDownListFor 方法的第一个参数的意图是“指向/绑定”到一个属性在模型中,这就是我制作 m => employee.Gender 的原因。当模型是员工的集合而不是单个员工时,我应该这样做吗?如果是这样,我很困惑如何为两个下拉列表生成唯一 ID,这两个下拉列表都为 NAME 和 ID 属性分配了“employee_Gender”。
对于 Helper DropDownListFor 的第三个参数,
listItems.Find(i => i.Value == employee.Gender).Text
这合理吗?employee.Gender 的值为“M”或“F”,但显示文本为“Male”和“Female”。我很困惑这个参数是否用于指定默认的“NO SELECT”第一个值,或者这个参数是否用于从下拉列表中选择当前员工的值——或者它可能两者都做?例如,如果找到,它是否选择指定的文本,否则添加指定为FIRST 的文本?如果找不到该值的参数?从我所看到的情况来看,这似乎是它的工作方式。这第三个参数可以简化还是我的例子合理?
感谢您耐心阅读我的许多问题,以更好地理解这一点。