Présélectionner des Éléments dans Multiselect-Listbox (MVC3 de Rasoir)
J'ai un problème avec la présélection des Éléments dans un contrôle listbox.
Je suis à l'aide du moteur d'affichage razor avec mvc 3. Je sais qu'il y a un peu de posts sur le même sujet, mais ils ne fonctionnent pas pour moi.
Code dans la Classe:
public class Foo{
private int _id;
private string _name;
public string Name{
get{
return _name;
}
public int Id {
get{
return _id;
}
}
Code Modèle:
public class FooModel{
private readonly IList<Foo> _selectedFoos;
private readonly IList<Foo> _allFoos;
public IList<Foo> SelectedFoos{
get{ return _selectedFoos;}
}
public IList<Foo> AllFoos{
get{ return _allFoos;}
}
}
Code dans cshtml:
@Html.ListBoxFor(model => model.Flatschels,
Model.AllFlatschels.Select(fl => new SelectListItem {
Text = fl.Name,
Value = fl.Id.ToString(),
Selected = Model.Flatschels.Any(y => y.Id == fl.Id)
}), new {Multiple = "multiple"})
J'ai essayé beaucoup d'autres choses, mais rien n'a fonctionné. J'espère que quelqu'un peut vous aider.
Vous devez vous connecter pour publier un commentaire.
Je ne peux pas vraiment expliquer pourquoi, mais j'ai réussi à le faire fonctionner. L'une de ces travaillées:
Le problème semble être que la propriété Sélectionnée sur SelectListItem est ignoré, et au lieu de la
ToString()
(!) la méthode est appelée, donc si vous avez besoin d'ajouter à votreFoo
classe:J'imagine qu'il a quelque chose à voir avec le fait d'être capable de persister à travers les demandes (qui sera aplatie à cordes à être passé sur le fil), mais c'est un peu déroutant!
@Html.DropDownListFor(m => m.SelectedFoos, new MultiSelectList(Model.AllFoos), new {multiple = ""}
(dans mon cas,Foo
est un enum, pas un objet de tuple. Le seul changement que je devais faire étaitDropDownListFor
->ListBoxFor
Dans MVC5 vous pouvez utiliser directement ListBoxFor avec multiselect. Assurez-vous que lors du chargement de la vue de votre selectedItem devraient avoir la liste des articles.