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

Если у вас есть список выбора, установленный на несколько в 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>

person Community    schedule 10.08.2009    source источник


Ответы (3)


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

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

Из связанной «статьи»:

  • Для вашей модели или класса модели представления требуется свойство коллекции для идентификаторов для выбранных элементов параметров, например List<int> ToppingIds.
  • В методе действия контроллера, для которого форма, содержащая ваши POST-запросы с множественным выбором, вы можете получить доступ к выбранным элементам параметров через свойство коллекции, которое вы добавили в модель или класс модели представления.
person Sam Wessel    schedule 10.08.2009

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

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

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)
person Hbas    schedule 01.06.2013

В VegTableViewmodel:

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

В контроллере: получить список овощей, а затем передать его в свойство Vegetables VegTableViewModel.

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

В обзоре:

@Html.ListBoxFor(m => m.L, new MultiSelectList(Model.Vegetables.Select(d => d.Items))
person Sreenath Plakkat    schedule 21.11.2011