DropDownListFor - отобразить простой список строк

Я знаю, что уже есть много подобных вопросов, но я потратил часы, пытаясь понять это, и ни один из других ответов, похоже, не помогает!

Я хочу просто отобразить список строк в раскрывающемся списке с помощью MVC. Неужели это так сложно? У меня нет разделения «Текст» и «Значение» (хотя MVC, похоже, требует его) - строка, отображаемая пользователю, является моим значением.

Пока у меня есть следующее:

Контроллер:

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

ViewModel:

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!" />
<% } %>

Но ничего, что я делаю, кажется, приводит к отображению раскрывающегося списка. Что я делаю неправильно?


person Grokys    schedule 02.08.2010    source источник


Ответы (1)


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

Вы путаете выражения и утверждения. Помощник Html возвращает строку, поэтому вам нужно использовать = для вывода «html-value» (а не ; после него).

Обновление:

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) %>
person Yakimych    schedule 02.08.2010
comment
Ах, какая глупая ошибка! Теперь я вижу раскрывающийся список с двумя элементами, но оба они говорят System.Web.Mvc.SelectListItem. Кажется, что-то не так с моим вызовом конструктора SelectList? - person Grokys; 02.08.2010
comment
Ах да - в конструкторе нужно указать, какие поля вы хотите отображать в DropDown. В противном случае вы получите SelectListItem.ToString () по умолчанию. - person Yakimych; 02.08.2010
comment
Спасибо, ваше обновление 2 - это именно то, что я искал :) - person Grokys; 02.08.2010