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