ASP.NET MVC DropDownListFortypes为List <string>的模型

我有一个types为List的模型的视图,我想在页面上放置一个下拉列表,列表中包含列表中的所有string作为下拉列表中的项目。 我是MVC的新手,我怎么做到这一点?

我试过这个:

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

但是抛出了一个错误。 任何帮助表示赞赏。

做一个下拉列表你需要两个属性:

  1. 要绑定到的属性(通常是整数或stringtypes的标量属性)
  2. 包含两个属性的项目列表(一个是值,一个是文本)

在你的情况下,你只有一个string列表,不能被利用来创build一个可用的下拉列表。

而对于数字2.你可以有价值和文字是相同的,你需要一个属性来绑定。 您可以使用助手的弱types版本:

 @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") ) 

如果你想在这个列表中预先select一些选项,你需要做的就是把这个视图模型的SelectedItemId属性设置为Items集合中某个元素的对应Value

如果你有一个列表types的string,你想在一个下拉列表中执行以下操作:

 List<string> ShipNames = new List<string>(){"A", "AB", "ABC"}; @Html.DropDownListFor(x => x.ShipNames, new SelectList(Model.ShipNames), "Select a Ship...", new { @style = "width:500px" }) 

其中给出了一个下拉列表如下所示:

 <select id="ShipNames" name="ShipNames" style="width:500px"> <option value="">Select a Ship...</option> <option>A</option> <option>A B</option> <option>AB C</option> </select> 

要获得控制器职位上的价值; 如果您使用的是具有List的string作为属性的模型(例如MyViewModel),因为您指定了x => x.ShipNames,您只需将方法签名设置为(因为它将在模型中序列化/反序列化):

公共ActionResult MyActionName(MyViewModel模型)

如果你只是想访问下拉列表后发现签名变成:

公共ActionResult MyActionName(stringShipNames)