Question

J'ai une question sur asp.net mvc-2 vues partielles fortement typés et les modèles de vue.

Je me demandais si je peux (ou devrait) avoir deux vues partielles fortement typées sur une seule page, sans mettre en œuvre un nouveau modèle de vue entière pour cette page.

Par exemple, j'ai une page qui affiche les profils, mais a également une forme en ligne pour ajouter un contact rapide. Chacune de ces entités a déjà son propre modèle de vue, je i.e. un ProfileViewModel et un ContactViewModel.

moi a besoin de deux vues partielles fortement typé, un à l'aide d'une liste IEnumerable de ProfileViewModels, et un à l'aide d'un ContactViewModel. Est-il possible ou souhaitable d'éviter de faire un troisième modèle de vue, un « IndexViewModel » pour cette page, qui contient une liste de ProfileViewModels et un ContactViewModel? N'est pas mise en œuvre de ce modèle de vue mauvaise pratique, ou plus net car il en résulte moins des modèles de vue?

Merci!

Était-ce utile?

La solution

Si les deux vues partielles exigent des modèles de vue qui sont déjà définies, la page qui héberge ces partials doit fournir la vue des modèles en quelque sorte. Il est facile d'imaginer comment un IEnumerable<ProfileViewModel> doit être fournie à la page contenant, comme les informations de contact arrive probablement de la fin arrière. Le ContactViewModel détient effectivement des données? Sinon, vous pourriez être en mesure de créer sur place dans la vue de la page contenant, et s'en passant seulement IEnumerable<ProfileViewModel> à elle.

Dans le cas contraire, la vue contenant doit recevoir à la fois une IEnumerable<ProfileViewModel> et un ContactViewModel. L'option que je pencherais vers définit en effet une nouvelle vision du modèle qui a des membres de données pour ces deux valeurs. Il est un peu mieux documenté et permet une meilleure type de compilateur vérifier que l'alternative de passer ces valeurs par ViewData[].

Un peu implicite dans votre question est l'idée que la création d'un modèle de vue est une corvée. Cela pourrait bien en effet être le cas pour les vues partielles, si la définition du modèle de vue purement miroirs d'une certaine entité finale arrière. Si tel est le cas, vous voudrez peut-être envisager de faire passer l'entité finale arrière directement au lieu de dupliquer sa définition et le contenu dans un modèle de vue.

Enfin, vue-modèles sont juste un outil. Utilisez-les si elles ajoutent de la valeur. Certains gain de demande de clarté, la documentation et les avantages mobiles de couplage en utilisant des classes distinctes de vue-modèle. D'autres, souvent des applications plus petites, ne gagnent pas assez pour mériter les frais généraux. Il n'y a rien en soi « mauvaise pratique » de ne pas mettre en œuvre des modèles de vue (ou tout autre modèle de conception, pour cette question.) Il est un choix de conception que vous pouvez sentir à l'aise si vous avez un argument raisonnable en sa faveur.

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