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

Gro*_*kys 12 c# asp.net-mvc drop-down-menu

我知道已经有很多类似的问题,但我花了好几个小时试图解决这个问题,其他答案似乎都没有帮助!

我想使用MVC在下拉列表中显示字符串列表.这真的很难吗?我没有"文本"和"值"分离(尽管MVC似乎需要一个) - 显示给用户的字符串是我的值.

到目前为止我有以下内容:

控制器:

public ActionResult Index()
{
    return View(new HomeViewModel());
}
Run Code Online (Sandbox Code Playgroud)

视图模型:

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; }
}
Run Code Online (Sandbox Code Playgroud)

视图:

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

没有我这样做似乎导致正在显示一个下拉列表.我究竟做错了什么?

Yak*_*ych 10

<%= Html.DropDownListFor(x => x.Items, Model.Items) %>
Run Code Online (Sandbox Code Playgroud)

你是令人困惑的表达和陈述.Html帮助器返回一个字符串,因此您需要使用=输出'html-value'(并且;后面没有).

更新:

Items = new SelectList(new[]
                       {
                           new SelectListItem {Text = "One", Value = "One"},
                           new SelectListItem {Text = "Two", Value = "Two"},
                       }, "Text", "Value");
Run Code Online (Sandbox Code Playgroud)

更新2:

实际上,对于您的情况,您可以以更简单的方式进行:

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

    public SelectList Items { get; set; }
    public string CurrentItem { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并在视图中:

<%= Html.DropDownListFor(x => x.CurrentItem, Model.Items) %>
Run Code Online (Sandbox Code Playgroud)