2010-08-02 100 views
12

我知道已經有很多類似的問題,但我花了數小時試圖弄清楚這一點,沒有其他答案似乎幫助!DropDownListFor - 顯示一個簡單的字符串列表

我想只是使用MVC在下拉列表中顯示字符串列表。這真的很難嗎?我沒有「文本」和「值」分隔(MVC似乎需要一個) - 顯示給用戶的字符串是我的價值。

我已經得到了迄今爲​​止以下內容:

控制器:

public ActionResult Index() 
{ 
    return View(new HomeViewModel()); 
} 

視圖模型:

public class HomeViewModel 
{ 
    public HomeViewModel() 
    { 
     Items = new SelectList(new[] 
     { 
      new SelectListItem { Text = "One", Value = "One" }, 
      new SelectListItem { Text = "Two", Value = "Two" }, 
     }); 
    } 

    public SelectList Items { get; set; } 
} 

查看:

<% using (Html.BeginForm()) { %> 
    <% Html.DropDownListFor(x => x.Items, Model.Items); %> 
    <input type="submit" value="Go!" /> 
<% } %> 

什麼我似乎導致顯示下拉列表。我究竟做錯了什麼?

回答

10
<%= Html.DropDownListFor(x => x.Items, Model.Items) %> 

您正在混淆表達式和語句。 Html幫助程序返回一個字符串,因此您需要使用=來輸出'html值'(並且後面沒有;)。

更新:

Items = new SelectList(new[] 
         { 
          new SelectListItem {Text = "One", Value = "One"}, 
          new SelectListItem {Text = "Two", Value = "Two"}, 
         }, "Text", "Value"); 

更新2:

其實你的情況下,你可能會做它一個更簡單的方式:

public class HomeViewModel 
{ 
    public HomeViewModel() 
    { 
     Items = new SelectList(new[] { "One", "Two" }); 
     CurrentItem = "Two"; 
    } 

    public SelectList Items { get; set; } 
    public string CurrentItem { get; set; } 
} 

並在視圖:

<%= Html.DropDownListFor(x => x.CurrentItem, Model.Items) %> 
+0

阿爾,多麼愚蠢的錯誤!現在我可以看到一個包含2個項目的下拉列表,但它們都說System.Web.Mvc.SelectListItem。看起來我的SelectList的構造函數調用有問題嗎? – Grokys 2010-08-02 11:29:51

+0

哦,是的 - 在構造函數中,你必須指定你想在DropDown中顯示哪些字段。否則,你得到的是默認的SelectListItem.ToString()。 – Yakimych 2010-08-02 11:39:21

+0

謝謝你,你的更新2正是我一直在尋找的:) – Grokys 2010-08-02 13:58:52