Question

J'utilise MVC 2.0 dans une application ASP.NET utilisant NHibernate.

J'ai un travail View, couche contrôleur et l'accès aux données en utilisant NHibernate qui est capable d'afficher et d'enregistrer une entité avec une relation à une autre entité mappée:

Personne -> Emplacement

Il utilise la touche pour afficher une liste de tous les emplacements HTML aide HTML.DropDownListFor (). L'utilisateur peut sélectionner l'un des emplacements de la liste, puis appuyez sur Enregistrer.

Le modèle de liaison par défaut définit correctement la valeur de l'emplacement de l'entité personne enregistrée. Cet emplacement est une entité mappée NHibernate, et est instancié et a l'identifiant qui a été sélectionné dans la liste déroulante. De toute évidence, puisque la liste déroulante qui contient des emplacements n'a que les IDs des lieux, le reste des valeurs pour l'emplacement sont nulles. C'est acceptable. Je n'essaie de sauver la personne avec une référence à un emplacement existant.

Alors, voilà la complication. Nous avons besoin de changer la relation entre les deux entités. Maintenant, la personne peut avoir une référence à de nombreux endroits.

Person.Locations sera un IList

Ma question est, comment obtenez-vous le liant modèle par défaut de prendre des sélections d'un multiselect menu déroulant et remplir un IList.

J'ai réussi à sauver des collections d'entités dans le passé en utilisant la syntaxe [index] .PropertyName comme explaing par Phil Haacked .... http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx .

La question ici est que je ne dispose que d'une liste déroulante, et il sera de retour après la ModelBinder une clé en répétant avec des valeurs différentes:

Person.Location.Id: 2
Person.Location.Id: 4
Person.Location.Id: 5

, malheureusement, ne fonctionne pas. la liste d'emplacement continue à venir Null arrière.

gars Notre interface utilisateur utilise une nappe JQuery pluggin pour afficher les éléments dans la liste de sélection, donc je préfère ne pas avoir à utiliser une interface différente.

Toutes les idées?

Était-ce utile?

La solution

Une suggestion:

Modifier le nom de votre élément de la liste à « emplacements », puis dans votre méthode d'action, inclure un paramètre string[] locations

Si MVC peut correspondre correctement les noms, vous devriez recevoir un tableau d'éléments sélectionnés. Vous pouvez ensuite traiter manuellement avec la mise à jour la base de données avec insertions et suppressions appropriées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top