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é
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é. SelectList
de SelectList
identique à SelectList
de la première dans la méthode ListBoxFor()
(la propriété DropDownItems
est déjà IEumerable
)