0

我有一个使用 Razor 视图引擎的 MVC 4 项目,发现了一些奇怪的东西:
我在视图中有以下代码行:

@Html.DropDownListFor(model => model.TypA.Enum, Html.GetEnumList())

这工作正常(Html.GetEnumList()返回一个List<SelectListItem>包含有效项目),但现在我有一个TypeA我正在for循环显示/编辑的列表:

@for(int i = 0; i < Model.ListOfA.Count; ++i)
{
    @Html.DropDownListFor(model => model.ListOfA[i].Enum, Html.GetEnumList())
}

现在在这种情况下,如果我编辑现有项目,则不会在下拉列表中预先选择当前值,就像在第一种情况下一样。如果我手动更改该值并将其发布回服务器,则会在列表中的每个对象中设置正确的值。

有谁知道为什么预选在这里不起作用?

现在我做了一个解决方法,将当前值提供给GetEnumList(model.ListOfA[i].Enum),然后将Selected属性设置为trueon SelectListItem,但我认为这不是必需的,因为它适用于第一种情况......

4

2 回答 2

0

这在过去发生在我身上,我正在填充 ViewBag 中的选项,当我确保将默认选项设置为 selected=true 时,这种情况就消失了。

var customers = new List<SelectListItem> { 
        new SelectListItem
        {
            Selected = true,
            Text = "Select one",
            Value = ""
        }
};
customers.AddRange(otherCustomers);
ViewBag.Customers = customers;
于 2013-04-14T23:00:57.020 回答
0

我无法解释为什么它没有绑定正确的值,但快速测试表明它也发生在我身上。作为解决方案,您可以删除 for 循环并使用模板:

@Html.EditorFor(m => m.ListOfA)

然后添加一个局部视图TypeA.cshtml,如下所示:

@model TypeA

@Html.DropDownListFor(model => model.Enum, Html.GetEnumList())

那应该正确绑定。

于 2013-04-14T23:54:12.890 回答