一尘不染

具有列表类型的ASP.NET MVC DropDownListFor

c#

我有一个带有类型模型的视图,List<string>我想在页面上放置一个下拉列表,该列表包含列表中所有字符串作为下拉列表中的项。我是MVC的新手,我将如何实现呢?

我尝试了这个:

@model List<string>
@Html.DropDownListFor(x => x)

但这引发了错误。


阅读 256

收藏
2020-05-19

共1个答案

一尘不染

要创建下拉列表,您需要两个属性:

  1. 您将绑定到的属性(通常是整数或字符串类型的标量属性)
  2. 包含两个属性的项目列表(一个用于值,一个用于文本)

在您的情况下,您只有一个字符串列表,无法利用该列表来创建可用的下拉列表。

而对于数字2,您可以使值和文本相同,并且需要绑定属性。您可以使用辅助程序的弱类型版本:

@model List<string>
@Html.DropDownList(
    "Foo", 
    new SelectList(
        Model.Select(x => new { Value = x, Text = x }),
        "Value",
        "Text"
    )
)

其中Foo将是ddl的名称,并由默认模型绑定程序使用。因此,生成的标记可能如下所示:

<select name="Foo" id="Foo">
    <option value="item 1">item 1</option>
    <option value="item 2">item 2</option>
    <option value="item 3">item 3</option>
    ...
</select>

据说,下拉列表的更好的视图模型如下:

public class MyListModel
{
    public string SelectedItemId { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}

然后:

@model MyListModel
@Html.DropDownListFor(
    x => x.SelectedItemId,
    new SelectList(Model.Items, "Value", "Text")
)

如果要在此列表中预先选择某个选项,则只需SelectedItemId将该视图模型的属性设置为集合Value中某个元素的对应属性即可Items

2020-05-19