DropDownListFor - 显示一个简单的字符串列表

问题描述:

我知道已经有很多类似的问题,但我花了数小时试图弄清楚这一点,没有其他答案似乎帮助!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!" /> 
<% } %> 

什么我似乎导致显示下拉列表。我究竟做错了什么?

<%= 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