2010-02-24 9 views
3

Je suis un peu incertain quand il est approprié d'utiliser Html.RenderAction() pour afficher mes vues et quand ne pas le faire. D'après ce que je comprends, parce que ce n'est pas un composant 'officiel' d'ASP.NET MVC, c'est une mauvaise pratique de l'utiliser, et son intention initiale était de réutiliser des widgets qui n'existent pas dans un contexte de contrôleur spécifique. Le fait est que RenderAction est très utile quand j'ai besoin d'un composant qui existe sous un autre contrôleur que celui pour lequel je suis en train de rendre la vue. Je pense que c'est un moyen très propre de rendre les composants qui reposent sur des données indisponibles dans la vue en cours. Mon View n'a pas besoin de fournir le modèle, comme il le ferait si j'utilisais RenderPartial()Quand est-il approprié d'utiliser Html.RenderAction()?

Est-ce une mauvaise pratique? Y a-t-il un meilleur moyen?

Répondre

4

C'est OK au cas où cela résoudrait votre problème.

3

Je pense que c'est un moyen très propre de rendre les composants qui reposent sur des données indisponibles dans la vue actuelle &. Ma vue n'a pas besoin de fournir le modèle, comme ce serait le cas si j'utilisais RenderPartial()

En fait, c'est. Par exemple, vous pouvez créer une petite vue pour servir de widgets et les injecter où vous le souhaitez. Le traitement des entrées utilisateur de ces widgets peut cependant devenir compliqué, mais c'est un autre problème.

Un autre scénario légitime auquel je peux penser est l'utilisation de modèles d'e-mails HTML. C'est un cas où vous n'avez clairement pas besoin de retourner la sortie rendue directement au navigateur, mais plutôt de l'insérer dans le corps de l'e-mail.

2

J'utilise Html.RenderAction() pour les raisons que vous avez données, de sorte que vous n'avez pas besoin de fournir les mêmes données encore et encore à chaque vue qui doit afficher des informations utilisateur (par exemple). Vous pouvez argumenter qu'il viole le modèle mvc comme la vue le sait maintenant sur le contrôleur. Mais je pense que les avantages de ce scénario l'emportent et que votre application sera plus sèche. Je l'utilise simplement pour tout ce que j'ai besoin de réutiliser dans de nombreux endroits différents (par exemple les données utilisateur que j'affiche sur chaque page de ma page maître) et je ne veux pas envoyer cette information explicitement à chaque vue. Si je ne me trompe pas, je pense qu'ils l'ont également inclus dans asp.net mvc 2, donc ça fait maintenant partie du framework.

1

J'ai trouvé une bonne raison d'utiliser Html.RenderAction dans un scénario basé sur les résultats du modèle de la vue parente. Par exemple, le modèle de la vue parent possède une propriété List qui doit apparaître dans une table. Toutefois, pour empêcher IF/ELSE conditionnel dans la vue parent, j'appelle Html.RenderAction(). L'action prend dans la liste et vérifie le compte. Si le compte est zéro, il renvoie une vue 'sans résultat'; sinon, il renvoie une vue qui traite les éléments de la liste sous la forme de son propre modèle. Ceci est plus propre en empêchant la logique d'être insérée dans la vue. Je peux également réutiliser la vue "pas de résultats" pour les autres zones de mon application.