Je suis sûr que cela a déjà été répondu, mais j'ai passé les trois dernières heures à la recherche d'une solution acceptable et je n'ai rien trouvé, donc je m'excuse pour ce que je suis Bien sûr, c'est une répétition.Reliure avec Relation Parent/Enfant
J'ai deux objets de domaine, joueur et position. Les joueurs ont une position. Mes objets de domaine sont des POCO liés à ma base de données avec NHibernate. J'ai une action Ajouter qui prend un joueur, donc j'utilise la liaison de modèle intégrée. À mon avis, j'ai une liste déroulante qui permet à un utilisateur de sélectionner la position du joueur. La valeur de la liste déroulante est l'identifiant de la position. Tout est correctement rempli, sauf que mon objet Position échoue à la validation (ModelState.IsValid) car, au moment de la liaison du modèle, il n'a qu'un ID et aucun de ses autres attributs requis.
Quelle est la solution préférée pour résoudre ce problème avec ASP.NET MVC 2?
Solutions J'ai essayé ...
- Fetch la position de la base de données sur la base Id avant ModelState.IsValid est appelé dans l'action Add de mon contrôleur. Je ne peux pas obtenir le modèle pour réexécuter la validation, donc ModelState.IsValid retourne toujours false.
- Créez un ModelBinder personnalisé qui hérite du classeur par défaut et récupère la Position à partir de la base de données après l'appel du classeur de base. Le ModelBinder semble faire la validation, donc si j'utilise quelque chose du classeur par défaut, je suis arrosé. Ce qui signifie que je dois complètement rouler mon propre classeur et saisir toutes les valeurs de la forme ... cela semble vraiment faux et inefficace pour un tel cas d'utilisation commun.
Solutions Je pense pourrait fonctionner, je ne peux pas comprendre comment faire ...
- Désactiver la validation de la classe de position quand il est utilisé dans le lecteur.
- Écrire un modèle personnalisé exploite le classeur par défaut pour la plupart des liaisons de propriétés, mais permet d'obtenir la position de la base de données AVANT que le classeur par défaut ne soit validé.
Alors, comment le reste de vous résoudre ce problème?
Merci,
Dan
post-scriptum À mon avis, avoir un PositionId sur Player juste pour ce cas n'est pas une bonne solution. Il doit être résoluble d'une manière plus élégante.
Donc, fondamentalement, je dois faire des DTO pour toutes mes vues. Cela semble assez inefficace pour moi. Est-ce que quelqu'un d'autre a une solution? – DFX
J'ai eu la même pensée quand j'en ai entendu parler au début. Mais les aspects positifs du test et de la séparation des préoccupations semblent toujours gagner. Pour moi, il est souvent plus rapide de créer un autre modèle que de déboguer un domaine spécifique ou de créer des modélisations personnalisées. –