2013-03-20 59 views
0

我使用的是ASP.NET MVC 2.0,但显然这也是MVC 3.0中的一个问题。MVC2 - DropDownListFor复杂属性 - 没有选择的项目

基本上如果你有一个“复杂”属性名称,那么Html.DropDownListFor不会设置任何SelectListItem.Selected = true

所以这个工程(其中ViewData.StatesIEnumerable<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的解决方案并不在我的情况下工作 - 我得到完全相同的结果(负载<option>元素但不是单个selected="selected"属性)。

我很想重新实现DropDownListFor,但如果有人知道解决方法,我很乐意听到它!

回答

0

我通过在CodePlex上复制MVC项目的源代码并进行一些更改来重新实现DropDownListFor来解决此问题。

我做的主要改变是用ModelMetadata.FromLambdaExpression().Model代替ViewData.Eval(在MVC 2和3中不支持索引属性)的调用,并且它工作得很好。

我也添加了对数值枚举值的支持,因为DropDownListFor只绑定枚举值,如果您使用字符串(名称)值而不是数值。