2009-06-04 9 views
1

Mon application MVC contient un modèle parent, qui contiendra 1 ou plusieurs modèles enfants.RenderPartial et sélection dynamique de vues partielles

J'ai configuré la vue principale pour afficher les propriétés du modèle parent, puis parcourir une collection de mes modèles enfants (de divers types, mais tous héritant du même type de base). Chacun des modèles enfants a une vue partielle correspondante.

Mon point de vue "parent" itère sur les modèles enfants comme celui-ci:

foreach (ChildBase child in ViewData.Model.Children) 
{ 
    Html.RenderPartial("Partials/"+child.ChildType.ToString()+"Child", 
    section); 
} 

Mon application a le /Partials/ChildType1.ascx approprié, ChildType2.ascx, etc. Tout fonctionne très bien.

  1. Est-ce une façon appropriée d'utiliser des vues partielles? Il se sent légèrement décalé en raison des noms dynamiques, mais je ne connais pas une autre façon d'effectuer une sélection dynamique de la vue correcte sans avoir recours à une grande déclaration de commutateur.

  2. Est-il conseillé d'utiliser la même vue pour plusieurs "modes" du même modèle? Je voudrais utiliser le même fichier .ascx pour afficher la vue "lecture seule" du modèle, ainsi qu'un formulaire d'édition, basé sur l'action du contrôleur utilisée pour renvoyer la vue.

Répondre

1

Iconic,

Il est difficile de répondre aux questions sans savoir exactement ce que vous essayez d'atteindre.

Je vais avoir un aller bien:

Si vous êtes familier avec les formulaires web, pensez à votre vue partielle en tant que usercontrol webforms pour le moment et penser à la partie de votre modèle est pertinent à votre vues partielles comme un «fragment d'information» qui veut passer à la vue partielle.

Les choix naturels pour l'utilisation d'une vue partielle concernent les éléments utilisés dans de nombreuses vues sur votre site.

Alors ... en réponse:

1.Although ce que vous faites est valide, il ne semble pas tout à fait correct. Un exemple d'une vue partielle, je l'ai utilisé pourrait être une ligne dans une grille de données où l'on pourrait appeler la vue partielle en passant dans l'objet de la ligne comme modèle:

foreach (MyObject o in Model.objects) 
{ 
    Html.RenderPartial("Shared/gridRowForObject.ascx", o, ViewData); 
} 

Vous pouvez fortement saisir également votre point de vue Attendez-vous à ce qu'un type spécifique soit transmis en tant qu'objet Modèle.

Encore une fois une autre utilisation peut être une boîte de connexion ou un « me Formulaire de contact », etc.

2._Ultimately c'est une décision de conception personnelle, mais j'iriez pour l'option qui nécessite le moins l'application/la logique de présentation et le code le plus propre à votre avis. Par exemple, j'éviterais d'écrire dans de nombreux appels conditionnels, et en inférant un type de base pour passer à toutes vos vues partielles, comme dans votre exemple, cela pourrait vous lier.

Lors de l'apprentissage du framework MVC, j'ai trouvé le code Oxite utile.

J'espère que cela aide.

Questions connexes