47 votes

RenderAction RenderPartial

De ce que j'ai compris qu'il y a une grande différence entre l' Html.RenderPartial inclus dans le ASP.NET MVC libération et l' HTML.RenderAction dans la Microsoft.Web.Mvc.ViewExtensions inclus dans MVC Futures.

Sur ma demande, j'ai beaucoup de pages composé de beaucoup de "widgets" (sorte de), chacun ayant sa propre fonction spécifique.

Il m'a semblé plus raisonnable d'utiliser l' RenderAction méthode comme chaque widget aurait un contrôleur dédié responsable de l'obtention de données différentes et de rendu dédié vue (par opposition à un seul contrôleur et une vue unique sur le modèle de passer à l' RenderPartial de l'aide pour rendre les points de vue).

Des tests que j'ai fait d'avoir un formulaire qui pointe à Créer une méthode d'action dans un contrôleur comme:

 <% using (Html.BeginForm("Create", "Message", FormMethod.Post, 
     new { id = "messageCreateForm" })) {%>

et de l'appeler avec

 <% Html.RenderPartial("MessageForm",new MessageDTO()); %>

rendra correcly un:

<form id="messageCreateForm" method="post" action="/Message/Create">

mais avec le même équivalent à RenderAction (donc à l'aide d'un MessageForm méthode d'action sur le contrôleur de rendre la vue) ne rendrait pas correcly donc:

 <% Html.RenderAction<MessageController>(m => m.MessageForm()); %>

sera de:

<form id="messageCreateForm" method="post" action="">

Notez que l'action est vide.

Est-ce la bonne manière d'utiliser l' RenderAction helper et est-il correct de l'utiliser dans de tels cas?

Mise à JOUR: En fait de renommer la vue partielle de _MessageForm rend le formulaire correcly.

80voto

Palantir Points 11889

Très ancien, mais il a sauté dans ma liste de questions à débattre :)

Il y a une grande différence entre RenderAction et RenderPartial. RenderPartial rendra, View sur le même contrôleur (ou partagée), tandis que l' RenderAction pour exécuter un cycle entier de la MVC, c'est: il va instancier le contrôleur (n'importe quel contrôleur de vous mentionner, non seulement celle-là), il va exécuter l'action, et il sera ensuite de retour à et rendre le résultat.

L' RenderPartial est plus semblable à un inclusion, il va même jusqu'à partager le même modèle si vous ne spécifiez pas un autre.

L' RenderAction est beaucoup plus complexe (et il peut y avoir des effets secondaires indésirables, c'est pourquoi ils n'ont pas que cette fonction soit disponible depuis la version 1 -- d'abord, il était disponible comme une fonctionnalité expérimentale).

Donc dans votre cas, si vous avez des widgets, c'est OK pour utiliser les deux. Il dépend de la complexité du widget. Si vous en avez un qui est d'obtenir les données à partir d'une base de, faire quelque chose de complexe, etc... alors vous devriez probablement utiliser RenderAction.

J'ai une nouvelle responsable pour des nouvelles sur les objets. J'ai créé un Bloc d'action, qui rendra un bloc avec les dernières nouvelles à mettre dans la page d'accueil. Ceci est un exemple parfait, à mon avis, pour RenderAction.

1voto

Pablo Points 19

Travailler avec MVC nécessite beaucoup d'attention pour ne pas se tirer dans le pied. Je veux dire par l'efficacité de la MVC produits. Dans les projets complexes, je préfère utiliser RenderPartial plutôt que RenderAction. J'utilise RenderPartial dans lequel j'utilise jQuery.requête ajax (avec Html.D'Action). Il est certainement plus efficace que RenderAction. Par cette façon, vous pouvez mettre votre point de Vue dans le cache, puis appeler jQuery.ajax. Essayez vous-mêmes. Ayende explique clairement en Hibernation Rhinocéros.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X