ListBoxPour ne pas me laisser sélectionner plusieurs éléments MVC

Lorsque je lance le code, je ne peux sélectionner qu’un élément à la fois, ce qui est étrange car “ListBoxFor ()” est utilisé pour sélectionner plusieurs éléments.

Sélectionnez plusieurs éléments

Voir (Index.cshtml):

@Html.ListBoxFor(m => m.DropDownItems, new MultiSelectList(Repository.DDFetchItems(), "Value", "Text", Model.DropDownItems))

Modèle (ModelVariables.cs):

 public class ModelVariables { public List DropDownItems { get; set; } } public static class Repository { public static List DDFetchItems() { return new List() { new SelectListItem(){ Text = "Dogs", Value = "1", Selected = true}, new SelectListItem(){ Text = "Cats", Value = "2"}, new SelectListItem(){ Text = "Death", Value = "3"} }; } } 

Contrôleur (HomeController.cs):

 [HttpGet] public ActionResult Index() { ModelVariables model = new ModelVariables() { DropDownItems = Repository.DDFetchItems() }; return View(model); } 

Vous ne pouvez pas lier un à une collection d’objects complexes (c’est ce que List est). Un affiche en arrière un tableau de valeurs simples (dans votre cas, si vous sélectionnez les première et troisième options, il soumettra [1, 3] (les valeurs des options sélectionnées).

Votre modèle a besoin d’une propriété IEnumerable pour se lier à.

 public class ModelVariables { public IEnumerable SelectedItems { get; set; } public IEnumerable DropDownItems { get; set; } } 

puis dans la méthode GET

 public ActionResult Index() { var ModelVariables= new ModelVariables() { DropDownItems = Repository.DDFetchItems(), SelectedItems = new List(){ 1, 3 } // to preselect the 1st and 3rd options }; return View(model); } 

et dans la vue

 @Html.ListBoxFor(m => m.SelectedItems, Model.DropDownItems) 

Notes de côté

  1. Remove Selected = true dans la méthode DDFetchItems() – ignoré par la méthode ListBoxFor() , car c’est la valeur de la propriété à laquelle votre lien détermine ce qui est sélectionné.
  2. Il n’est pas nécessaire de créer une nouvelle SelectList de SelectList identique à SelectList de la première dans la méthode ListBoxFor() (la propriété DropDownItems est déjà IEumerable )