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) %>
阿尔,多么愚蠢的错误!现在我可以看到一个包含2个项目的下拉列表,但它们都说System.Web.Mvc.SelectListItem。看起来我的SelectList的构造函数调用有问题吗? – Grokys 2010-08-02 11:29:51
哦,是的 - 在构造函数中,你必须指定你想在DropDown中显示哪些字段。否则,你得到的是默认的SelectListItem.ToString()。 – Yakimych 2010-08-02 11:39:21
谢谢你,你的更新2正是我一直在寻找的:) – Grokys 2010-08-02 13:58:52