Как написать простой Html.DropDownListFor ()? - PullRequest
127 голосов
/ 17 июня 2010

В ASP.NET MVC 2 я хотел бы написать очень простой выпадающий список, который дает статические параметры. Например, я бы хотел предоставить выбор между «красным», «синим» и «зеленым».

Ответы [ 7 ]

180 голосов
/ 17 июня 2010

См. эту статью MSDN и пример использования здесь, при переполнении стека .

Допустим, у вас есть следующий класс Linq / POCO:

public class Color
{
    public int ColorId { get; set; }
    public string Name { get; set; }
}

И скажем, у вас есть следующая модель:

public class PageModel 
{
   public int MyColorId { get; set; }
}

И, наконец, допустим, что у вас есть следующий список цветов.Они могут быть получены из запроса Linq, из статического списка и т. Д.: * 10101 *

public static IEnumerable<Color> Colors = new List<Color> { 
    new Color {
        ColorId = 1,
        Name = "Red"
    },
    new Color {
        ColorId = 2,
        Name = "Blue"
    }
};

По вашему мнению, вы можете создать выпадающий список следующим образом:

<%= Html.DropDownListFor(n => n.MyColorId, 
                         new SelectList(Colors, "ColorId", "Name")) %>
60 голосов
/ 03 октября 2010
<%: 
     Html.DropDownListFor(
           model => model.Color, 
           new SelectList(
                  new List<Object>{ 
                       new { value = 0 , text = "Red"  },
                       new { value = 1 , text = "Blue" },
                       new { value = 2 , text = "Green"}
                    },
                  "value",
                  "text",
                   Model.Color
           )
        )
%>

или вы не можете писать классы, поместите что-то подобное прямо в представление.

34 голосов
/ 01 мая 2012

Избегайте большого количества аппликатур, начиная со словаря в модели

namespace EzPL8.Models
{
    public class MyEggs
    {
        public Dictionary<int, string> Egg { get; set; }

        public MyEggs()
        {
            Egg = new Dictionary<int, string>()
            {
                { 0, "No Preference"},
                { 1, "I hate eggs"},
                { 2, "Over Easy"},
                { 3, "Sunny Side Up"},
                { 4, "Scrambled"},
                { 5, "Hard Boiled"},
                { 6, "Eggs Benedict"}
            };

    }


    }

В представлении преобразуйте его в список для отображения

@Html.DropDownListFor(m => m.Egg.Keys,
                         new SelectList(
                             Model.Egg, 
                             "Key", 
                             "Value"))
31 голосов
/ 14 марта 2014

Привет, вот как я это сделал в одном проекте:

     @Html.DropDownListFor(model => model.MyOption,                
                  new List<SelectListItem> { 
                       new SelectListItem { Value = "0" , Text = "Option A" },
                       new SelectListItem { Value = "1" , Text = "Option B" },
                       new SelectListItem { Value = "2" , Text = "Option C" }
                    },
                  new { @class="myselect"})

Надеюсь, это кому-нибудь поможет.Спасибо

13 голосов
/ 10 мая 2014

Или, если это из контекста базы данных, вы можете использовать

@Html.DropDownListFor(model => model.MyOption, db.MyOptions.Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() }))
5 голосов
/ 09 июня 2014

С помощью «Пожалуйста, выберите один предмет»

@Html.DropDownListFor(model => model.ContentManagement_Send_Section,
  new List<SelectListItem> { new SelectListItem { Value = "0", Text = "Plese Select one Item" } }
    .Concat(db.NameOfPaperSections.Select(x => new SelectListItem { Text = x.NameOfPaperSection, Value = x.PaperSectionID.ToString() })),
  new { @class = "myselect" })  

Получено из кодов: Мастер-программист && Джоэл Уолунд ;
Король Ссылка: https://stackoverflow.com/a/1528193/1395101 JaredPar ;

Спасибо Мастер-программист && Джоэл Уолунд && JaredPar ;

Удачи, друзья.

1 голос
/ 16 сентября 2018
@using (Html.BeginForm()) {
    <p>Do you like pizza?
        @Html.DropDownListFor(x => x.likesPizza, new[] {
            new SelectListItem() {Text = "Yes", Value = bool.TrueString},
            new SelectListItem() {Text = "No", Value = bool.FalseString}
        }, "Choose an option") 
    </p>
    <input type = "submit" value = "Submit my answer" />
} 

Я думаю, что этот ответ похож на ответ Берата, поскольку вы помещаете весь код для своего DropDownList непосредственно в представление. Но я думаю, что это эффективный способ создания выпадающего списка y / n (логический), поэтому я хотел поделиться им.

Некоторые заметки для начинающих:

  • Не беспокойтесь о том, что называется «х» - оно создано здесь, для в первый раз, и не ссылается на что-либо еще в Приложение MVC, так что вы можете называть его как хотите - «х», «модель», «м» и т. Д.
  • Заполнитель, который пользователи увидят в раскрывающемся списке: «Выберите опцию», так что вы можете изменить это, если хотите.
  • Перед выпадающим списком есть текст, который спрашивает: "Вам нравится пицца?"
  • Это должен быть полный текст формы, включая кнопку отправки, я думаю

Надеюсь, это кому-нибудь поможет,

...