2011-04-16 84 views
43

我有一個類型爲List的模型的視圖,我希望在頁面上放置一個下拉列表,該下拉列表包含列表中的所有字符串作爲下拉列表中的項目。我是MVC的新手,我該如何實現這一目標?ASP.NET MVC DropDownListFor與模型類型列表<string>

我嘗試這樣做:

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

而是拋出一個錯誤。任何幫助表示讚賞。

+3

@ Html.Dr opDownListFor(x => yourInputVariable,Model)應該可以工作 – 2012-06-25 07:46:17

回答

112

爲了使一個下拉列表,你需要兩個屬性:

  1. 一個屬性,您將綁定到
  2. 包含兩個屬性的項目清單(整型或字符串的通常是標量屬性)(一個是值,另一個是文本)

在你的情況下,你只有一個字符串列表,它不能被利用來創建一個可用的下拉列表。

雖然對於數字2,你可以讓值和文本是相同的,你需要一個屬性來綁定。你可以使用助手的弱類型的版本:

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

其中Foo將DLL的名稱和默認的模型使用的粘合劑。所以生成的標記可能是這個樣子:

<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屬性設置爲某個e的相應ValueItems集合中發表。

+11

這不是工作,你如何得到控制器上的值Post ... SelectedItemId和Items都是null。 – Marc 2012-09-14 22:07:39

2

如果你有一個字符串類型的列表,你在下拉列表中選擇所需我做了以下內容:

List<string> ShipNames = new List<string>(){"A", "A B", "A B C"}; 

@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>A B C</option> 
</select> 

要獲得控制器帖子上的值;如果您正在使用具有字符串列表作爲屬性的模型(例如MyViewModel),因爲您已指定x => x。ShipNames您只需在方法簽名(模型內,因爲這將是串行/ deserialsed):

公衆的ActionResult MyActionName(MyViewModel模型)

如果你只是想訪問下拉列表在後,則變得簽名:

公衆的ActionResult MyActionName(字符串ShipNames)

+0

我不確定這是否有效。對於後MyActionName(MyViewModel模型),選定項目將被綁定到什麼屬性。 ShipNames屬性僅包含可選值的列表。 – RayLoveless 2018-01-09 23:38:01