我正在使用ASP.NET MVC 2.0,但显然这也是MVC 3.0中的一个问题。
基本上,如果您有“复杂”的媒体资源名称,则Html.DropDownListFor
不会设置任何SelectListItem.Selected = true
。
这样可行(ViewData.States
为IEnumerable<SelectListItem>
)。
<td><%= Html.DropDownListFor( m => m.State, ViewData.States ) %></td>
但这不是:
<td><%= Html.DropDownListFor( m => m.CaseFields[i].State, ViewData.States ) %></td>
我看到了this QA where the answerer correctly explained the problem,但是他使用SelectList
作为DropDownListFor
的参数的解决方案在我的情况下不起作用 - 我得到完全相同的结果({{1}的加载}元素但不是单个<option>
属性。)
我很想重新实现selected="selected"
,但如果有人知道解决方法,我很乐意听到它!
答案 0 :(得分:0)
我通过在CodePlex上复制MVC项目中的源并进行一些更改来重新实现DropDownListFor
来解决这个问题。
我做的主要更改是将ViewData.Eval
(在MVC 2和3中不支持索引属性)的调用替换为ModelMetadata.FromLambdaExpression().Model
,并且效果很好。
我还添加了对数字枚举值的支持,因为如果使用字符串(名称)值而不是数值,DropDownListFor
仅绑定枚举值。