Как список с множественным выбором работает с привязкой модели в ASP.NET MVC? - PullRequest
49 голосов
/ 10 августа 2009

Если в ASP.NET MVC для списка выбора задано множество, как работает привязка модели?

Что он возвращает для выбранных вами элементов, массив?

<SELECT NAME="toppings" MULTIPLE SIZE=5>
    <option value="mushrooms">mushrooms</option>
    <option value="greenpeppers">green peppers</option>
    <option value="onions">onions</option>
    <option value="tomatoes">tomatoes</option>
    <option value="olives">olives</option>
</SELECT>

Ответы [ 3 ]

26 голосов
/ 10 августа 2009

Да, по умолчанию мультиселект-лист публикуется через массив выбранных значений.

Эта статья содержит дополнительную информацию, в том числе о том, как использовать строго типизированные представления с множественным списком.

Из ссылки на "статью":

  • Вашему классу модели или модели представления требуется свойство коллекции для идентификаторов для выбранных элементов опций, например, List<int> ToppingIds.
  • В методе действия контроллера, к которому форма, содержащая ваши POST-списки с несколькими вариантами выбора, вы можете получить доступ к выбранным элементам опций через свойство коллекции, добавленное вами в модель, или просмотреть класс модели.
23 голосов
/ 01 июня 2013

Да, он возвращает массив.

Посмотреть модель:

public class MyViewModel
{
    public int[] SelectedIds { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}

Контроллер:

public ActionResult Index()
{
    var model = new MyViewModel
    {
        // fetch the items from some data source
        Items = Enumerable.Select(x => new SelectListItem
        {
            Value = x.Id,
            Text = "item " + x.Id
        })
    };
    return View(model);
}

Вид:

@model MyViewModel
@Html.ListBoxFor(x => x.SelectedIds, Model.Items)
7 голосов
/ 21 ноября 2011

В VegTableViewmodel:

public IEnumerable<MultiSelectList> Vegetables { get; set; }

В контроллере: Получите список овощей и передайте его в свойство овощей в VegTableViewModel.

viewmodel.Vegetables = vegetables .Select(d => new MultiSelectList(d.VegName));

В представлении:

@Html.ListBoxFor(m => m.L, new MultiSelectList(Model.Vegetables.Select(d => d.Items))
...