Pourquoi est-ListBoxFor pas à sélectionner des éléments, mais ListBox est?

J'ai le code suivant dans mon point de vue:

<%= Html.ListBoxFor(c => c.Project.Categories,
        new MultiSelectList(Model.Categories, "Id", "Name", new List<int> { 1, 2 }))%>

<%= Html.ListBox("MultiSelectList", 
        new MultiSelectList(Model.Categories, "Id", "Name", new List<int> { 1, 2 }))%>

La seule différence est que la première aide est fortement typé (ListBoxFor), et il ne parvient pas à afficher les éléments sélectionnés (1,2), même si les éléments s'affichent dans la liste, etc. Le plus simple zone de liste fonctionne comme prévu.

Je suis évidemment manque quelque chose ici. Je peux utiliser la deuxième approche, mais cela m'énerve vraiment et j'aimerais comprendre.

Pour référence, mon modèle est:

public class ProjectEditModel
{
    public Project Project { get; set; }
    public IEnumerable<Project> Projects { get; set; }
    public IEnumerable<Client> Clients { get; set; }
    public IEnumerable<Category> Categories { get; set; }
    public IEnumerable<Tag> Tags { get; set; }
    public ProjectSlide SelectedSlide { get; set; }
}

Mise à jour

Je viens de changer la zone de liste nom de Projet.Catégories (correspondant à mon modèle) et à présent, il ne parvient pas à sélectionner l'élément.

<%= Html.ListBox("Project.Categories",
        new MultiSelectList(Model.Categories, "Id", "Name", new List<int> { 1, 2 }))%>

Je suis de toute évidence ne pas comprendre la magie qui se passe ici.

Mise à jour 2

Ok, c'est purement de nommage, par exemple, cela fonctionne...

<%= Html.ListBox("Project_Tags",
new MultiSelectList(Model.Tags, "Id", "Name", Model.Project.Tags.Select(t => t.Id)))%>

...parce que le nom du champ est Project_Tags, pas de Projet.Les balises, en fait, rien d'autre que des Balises ou d'un Projet.Les balises de travail. Je ne comprends pas pourquoi ce serait la cause d'un problème (autre que cela correspond au nom de l'entité), et je ne suis pas assez bon d'être en mesure de creuser et de trouver.

  • J'ai eu un problème similaire. Spécifiquement si j'étais ma valeur sélectionnée de la zone de liste (sur le modèle) à partir du contrôleur de base sur une autre valeur. Pour obtenir que cela fonctionne, je dois mettre la ModelState["Catégories"].De la valeur. Je n'aime pas ça, mais l'idée que le ModelState objet peut être utilisé sur le Modèle lui-même est confuse au possible, exaspérant au pire.
InformationsquelleAutor Roger Rogers | 2010-02-22