Подтвердить что ты не робот

Как многосегментный список работает с привязкой модели в 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>
4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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)

Ответ 3

В VegTableViewmodel:

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

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

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

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

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