2009-03-25 10 views
5

Ai-je manqué quelque chose de fondamental aux principes de MVC ou est-ce que je deviens fou? Si j'ai une vue qui affiche une liste de livres et une liste d'auteurs, je dois créer une classe qui aurait la liste des livres et la liste des auteurs en tant que propriétés. Droite?Utilisation de deux modèles fortement typés pour une vue MVC

Je voudrais alors fortement taper la vue pour utiliser cette classe.

Maintenant je veux créer une nouvelle page avec les mêmes listes mais qui a aussi une liste de promotions. Dois-je créer une autre classe avec une liste de propriétés Books, une liste de propriétés d'auteurs et une liste de propriétés de promotions?

Si je crée des classes pour toutes les vues que je crée, beaucoup de travail supplémentaire. Suis-je censé créer de forts partiels typés pour chacun d'eux? Que faire si la mise en page diffère à chaque fois?

Actuellement, j'ai une classe BaseViewData qui est utilisée par toutes les vues car elle contient des propriétés communes. Cependant, j'ai maintenant du mal à obtenir d'autres éléments sans complètement gonfler la classe BaseViewData.

S'il vous plaît quelqu'un peut m'aider à comprendre la théorie que tous les exemples simples ne couvrent pas.

Répondre

3

J'utilise le ViewData extension methods de MvcContrib qui ajoutent le support de multiples fortement modèles typés (à condition qu'ils soient de types différents). Code pour les ajouter à la ViewData ressemble à ceci:

User currentUser = GetCurrentUser(); 
List<Project> projectList = projectRepository.GetRecentProjects(currentUser); 
ViewData.Add(user); 
ViewData.Add(projectList); 

Code en vue de les retirer ressemble à ceci:

User user = ViewData.Get<User>(); 
List<Project> projectList = ViewData.Get<List<Project>>(); 

Cela supprime à la fois les « cordes magiques » et la coulée de type. Notez que cela ne fait rien avec la propriété Model de la vue.

+0

Etes-vous censé taper des variables dans la vue? Je pensais que la vue est censée être juste un code d'affichage ou suis-je juste trop pédant? –

0

J'ai rencontré le même problème. Je pense que la solution générale pour la plupart des gens est de créer une classe de conteneur qui contient les modèles Books and Authors que vous voulez vraiment, et passez ce conteneur à votre View.

Sous-optimale, oui, mais cela fonctionne. Espérons que cela sera abordé dans les futures versions du cadre.

1

Créer une classe de conteneur pour jamais objet dans votre système, et utiliser pour toutes les vues - simples

objets ayant une valeur null ont pas de frais généraux réel

Questions connexes