0

我正在使用 ASP.NET MVC 2.0,但显然这也是 MVC 3.0 中的一个问题。

基本上,如果您有一个“复杂”的属性名称,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>

我看到了这个 QA,其中回答者正确地解释了问题,但是他使用SelectList作为参数的解决方案DropDownListFor在我的情况下不起作用 - 我得到完全相同的结果(<option>元素负载但不是单个selected="selected"属性)。

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

4

1 回答 1

0

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

我所做的主要更改是将调用ViewData.Eval(在 MVC 2 和 3 中不支持索引属性)替换为ModelMetadata.FromLambdaExpression().Model,并且效果很好。

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

于 2013-03-25T18:32:36.967 回答