不幸的是
@Html.DropDownListFor(),在循环渲染控件时,其行为与其他助手有所不同。先前已将其报告为CodePlex上的一个问题(不确定是错误还是限制)
are 2选项可解决此问题,以确保根据模型属性选择了正确的选项
选项1 (使用
EditorTemplate)
EditorTemplate为集合中的类型创建一个自定义。创建局部输入
/Views/Shared/EditorTemplates/AggregationLevelConfiguration.cshtml(请注意名称必须与类型名称匹配
@model yourAssembly.AggregationLevelConfiguration@Html.DropDownListFor(m => m.HelperCodeType, (SelectList)ViewData["CodeTypeItems"]).... // other properties of AggregationLevelConfiguration
然后在主视图中将传递
SelectList给
EditorTemplateas
additionalViewData
@using (Html.BeginForm()){ ... @Html.EditorFor(m => m.Configurations , new { CodeTypeItems = Model.CodeTypeItems }) ...选项2 (
SelectList在每次迭代中生成一个新值并设置
selectedValue)
在此选项中,您的财产
CodeTypeItems应为
IEnumerable<GenericIdNameType>,而不是
SelectList(或仅
preTypes作为公共财产)。然后在主视图中
@Html.DropDownListFor(m => m.Configurations[0].HelperCodeType, new SelectList(Model.CodeTypeItems, "Id", "Name", Model.Configurations[0].HelperCodeType)
旁注:无需使用
new { id = "Configurations[0].HelperCodeType"-DropDownListFor()已经生成该
id属性的方法



