[asp.net-mvc]ASP.NET MVC: DropDownListFor 不选择任何选项

标签: Asp.net-MVC Linq C#
发布时间: 2017/3/25 17:54:32
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有这来填充下拉列表中的 ASP.NET MVC 视图。

<%= Html.DropDownListFor(model => model.Bikes,
      Model.Bikes.Select(
      x => new SelectListItem {
               Text = x.Name,
               Value = Url.Action("Details", "Bike", new { bikeId = x.ID }),
               Selected = x.ID == Model.ID,
           })) %>

调试这我可以看到, Selected 属性设置为 true 时,它应该是。但当呈现视图,选择 none 列表中的选项。我意识到这可能做与另一重载的 DropDownListFor ,但我真的想要这个版本的工作。

有什么想法?

解决方法 1:

您所选的值不工作的原因是因为你是使用 Url 作为选项值,但指定 Model.IDSelected 子句。

试着像这样︰

<%= Html.DropDownListFor(
    model => model.Bikes,
    new SelectList(Model.Bikes, "Id", "Name", Model.ID)
)%>

"Id"指示将作为选项值时使用的属性 "Name" 指示将用作选项标签的属性。

如果您想要保留 Url.Action 你可以试试︰

<%= Html.DropDownListFor(
    model => model.Bikes,
    new SelectList(Model.Bikes.Select(x => new {
        Id = x.Id,
        Name = Url.Action("Details", "Bike", new { bikeId = x.ID })
    }), "Id", "Name", Model.ID)
)%>

你会注意到我已经倒的名称和 Id,因为它似乎更符合逻辑,使用模型 Id 作为选项值。


更新︰

这并不工作的原因是因为你要绑定到 IEnumerable (第一个参数 DropDownListFor helper)。虽然您使用相同,它应该是一个标量属性 model.Bikes 集合︰

<%= Html.DropDownListFor(
    model => model.SelectedBikeValue,
    Model.Bikes.Select(
        x => new SelectListItem {
                 Text = x.Name,
                 Value = Url.Action("Details", "Bike", new { bikeId = x.ID }),
                 Selected = x.ID == Model.ID,
        }
)) %>

我谈不使用 Url 作为选项值代表真实。

赞助商