Comment une liste de sélection multiple fonctionne-t-elle avec la liaison de modèle dans ASP.NET MVC?

Si vous avez une liste de sélection définie sur multiple dans ASP.NET MVC, comment fonctionne le modelbinding?

Que retourne-t-il pour vos éléments sélectionnés, un tableau?

 mushrooms green peppers onions tomatoes olives  

Oui, par défaut, une liste multiselect sera affichée dans un tableau des valeurs sélectionnées.

Cet article contient des informations supplémentaires, notamment sur l’utilisation de vues fortement typées avec une liste multisélecsortingque.

De l’article lié:

  • Votre modèle ou votre classe de modèle de vue a besoin d’une propriété de collection pour les ID des éléments d’option sélectionnés, par exemple List ToppingIds .
  • Dans la méthode d’action du contrôleur à laquelle le formulaire contenant vos POST de liste de sélection multiple, vous pouvez accéder aux éléments d’option sélectionnés via la propriété de collection que vous avez ajoutée au modèle ou à la classe de modèle de vue.

Oui, il retourne un tableau.

Voir le modèle:

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

Manette:

 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); } 

Vue:

 @model MyViewModel @Html.ListBoxFor(x => x.SelectedIds, Model.Items) 

Dans VegTableViewmodel:

 public IEnumerable Vegetables { get; set; } 

Dans la liste des contrôleurs: Obtenez les légumes, puis transmettez-la à la propriété Vegetables de VegTableViewModel.

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

Dans la vue:

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