2010-06-16 3 views
118

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

ответ

162

См. this MSDN article и example usage here on Stack Overflow.

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

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

И давайте предположим, что у вас есть следующие модели:

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

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

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")) %> 
+0

это действительно прозрачный. Я хотел бы знать, где я должен поместить IEnumerable в свой код? Я знаю, что это глупо, как вопрос, но я очень потерян и новичок в этом: s – Rinesse

+5

Не беспокойтесь, друг. Я знаю каково это.:) Как вы предположили в своем первоначальном вопросе, является ли это статическим списком, который вы собираетесь создать в коде, или вы собираетесь вытащить этот список из базы данных? –

+0

статический список, который содержит 4 параметра, не обрезает базу данных – Rinesse

51
<%: 
    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 
      ) 
     ) 
%> 

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

+0

Спасибо, это было трудно найти решение для ... – ctorx

+2

Ниже приведена ошибка при попытке кода: "Ссылка на объект не установлена ​​в экземпляр объекта. » –

+9

Плохая идея добавить логику модели на ваш взгляд –

28

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

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")) 
25

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

 @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"}) 

Я надеюсь, что это поможет кому-то. Благодаря

8

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

@Html.DropDownListFor(model => model.MyOption, db.MyOptions.Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() })) 
+14

Пожалуйста, не поощряйте такую ​​глупость. Если вам нравится ссылаться на свой контекст db в ваших представлениях Razor, которые находятся на вас, но для th ose нас, которые, как строительное программное обеспечение правильный путь, то это ужасная идея. Привяжите представление Razor к классу модели представления, любые данные, необходимые для представления, хранятся в экземпляре модели представления, созданной контроллером. Это часть причины, по которой я ухожу от .Net, слишком много страшных разработчиков делают ужасные вещи с их кодом, создающим огромные головные боли для всех остальных. Бьюсь об заклад, вы положили всю свою бизнес-логику в свои контроллеры! – JBeckton

+2

Во-первых, извините за любые грамматические ошибки, поскольку английский не является моим первым языком. Всегда приятно видеть, что кто-то делает такой прозаический комментарий, я приветствую вас, сэр, что вы нашли время, чтобы внести свой вклад. Это также всегда обнадеживает, что профессия разработчиков в таких хороших руках, как ваша, так как моя не будет делать. Подобно вашему невежественному комментарию, почему я никогда больше не выхожу здесь. Могу ли я сообщить вам, что, когда я это написал, мне было 8 месяцев в моем образовании и никогда не касался веб-разработки заранее. Я хотел поделиться другим вопросом с небольшими знаниями, которые у меня были. –

+4

8 месяцев в? Тогда зачем пытаться решать проблемы, когда вы не знаете, как это сделать? Мой комментарий далек от невежества, я вижу этот материал изо дня в день. Вы должны приступить к рассмотрению объема ручной работы, которую вы обязываете своим коллегам. представьте, что у вас есть корпоративное приложение с сотнями просмотров, и ваш технический директор хочет переключиться на Oracle DB. Представьте личную стоимость рефакторинга всех видов и контроллеров, которые используют выпадающие списки только из-за вашей одной строки кода! Я не пытаюсь оскорбить вас, просто пытаюсь объяснить вам, как плохой совет может иметь огромные последствия. – JBeckton

4

С "Пожалуйста, выберите один пункт"

@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" }) 

Производный от кодов: Master Programmer & & Joel Валунд;
King Номер ссылки: https://stackoverflow.com/a/1528193/1395101JaredPar;

Благодаря Мастер программист & & Joel Валунд & & JaredPar;

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

Смежные вопросы