Лучший способ реализовать DropDownList в ASP.NET MVC 2?

Я пытаюсь понять лучший способ реализовать a DropDownList в ASP.NET MVC 2 с помощью DropDownListFor помощник. Это - многослойный вопрос.

Во-первых, что лучший способ состоит в том, чтобы передать данные списка представлению?

  1. Передайте список в своей модели с a SelectList свойство, которое содержит данные
  2. Передайте список на пути ViewData

Как я вкладываю пустое значение DropDownList? Если я создаю его в SelectList когда я создаю его или являюсь там некоторыми другими средствами сказать, что помощник к автоматическому создает пустую стоимость?

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

12
задан Leniel Maccaferri 10 September 2013 в 22:07
поделиться

5 ответов

Лучше всего создать список SelectList в вашем контроллере - используйте мой метод расширения здесь: http://blog.wekeroad.com/2010 / 01/20 / my-favourite-helpers-for-aspnet-mvc

Вставить это в ViewData, используя тот же ключ, что и имя вашего свойства: ViewData ["statusid"] = MySelectList

Затем просто используйте Html.DropDownFor (x => x.StatusID) , и все готово.

9
ответ дан 2 December 2019 в 21:02
поделиться

Вы можете сделать что-то вроде:

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

или

<%= Html.DropDownList("ListItems", Model.ListItems, "")%>

Последний параметр 'optionLabel' создает пустой элемент списка

В этом случае вы можно увидеть, что ListItems - это свойство модели.

Я также сделал вид строго типизированным для модели.

2
ответ дан 2 December 2019 в 21:02
поделиться

(Вы это уже знаете!)

  1. Передайте список в вашей модели со свойством SelectList, содержащим данные

Да, добавьте его при построении SelectList. (Если вы строите список с помощью LINQ, Union может пригодиться.)

Да, да, да, да.

0
ответ дан 2 December 2019 в 21:02
поделиться

Отвечаю по частям:

  1. Лучший способ IMHO - передать список в ViewModel вот так:

    public SelectList Colors
    {
     get
     {
     // Получение списка Colors, например, из базы данных...
     List colors = GetColors().ToList();
    
     // Возвращаем SelectList для использования на стороне представления
     return new SelectList(colors, "Value", "Name");
     }
    }
    
  2. Чтобы получить пустой или стандартный вариант, например ( -- Выберите цвет -- ), вы можете сделать это на стороне представления:

    @Html.DropDownListFor(m => m.Color, Model.Colors, "-- Выберите цвет --")
    
  3. Вам придется снова получить/наполнить список, если он является частью ViewModel.


Посмотрите следующую статью в блоге. Она может дать вам несколько советов:

Drop-down Lists and ASP.NET MVC

3
ответ дан 2 December 2019 в 21:02
поделиться

Я считаю более интуитивным работать с последовательностью SelectListItems (а не с SelectList).

Например, это создаст IEnumerable из последовательности объектов клиентов, которые вы можете передать вспомогательному модулю Html.DropDownListFor (...). Свойство «Выбрано» может дополнительно установить элемент по умолчанию в раскрывающемся списке.

var customers = ... // Get Customers
var items = customers.Select(c => new SelectListItem
                             {
                                 Selected = (c.Id == selectedCustomerId),
                                 Text = c.Email,
                                 Value = c.Id.ToString()
                             }); 
0
ответ дан 2 December 2019 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: