【问题标题】:Html.DropDownListFor does not preselect current value in loopHtml.DropDownListFor 不会在循环中预选当前值
【发布时间】:2013-04-14 22:28:26
【问题描述】:

我有一个使用 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) 并在相应的SelectListItem 上将Selected 属性设置为true 做了一个解决方法,但我认为这不是必需的,因为它适用于第一种情况……

【问题讨论】:

  • 能否请您包含生成 SelectListItem 列表的代码?另外,您看到的行为是什么?是否所有选定的值都与第一个选定的选项匹配?
  • 你设置断点并确认ListOfA数组设置正确了吗?
  • 您的列表中有默认选项吗?

标签: .net asp.net-mvc c#-4.0 razor asp.net-mvc-4


【解决方案1】:

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

var customers = new List<SelectListItem> { 
        new SelectListItem
        {
            Selected = true,
            Text = "Select one",
            Value = ""
        }
};
customers.AddRange(otherCustomers);
ViewBag.Customers = customers;

【讨论】:

    【解决方案2】:

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

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

    然后像这样添加一个名为TypeA.cshtml 的局部视图:

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

    应该正确绑定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-06
      • 2016-09-21
      • 1970-01-01
      相关资源
      最近更新 更多