Quelle est la différence entre le résultat du contrôleur nommé ViewResult
et PartialViewResult
? Plus important encore, quand utilise-t-on PartialViewResult
?
Réponses
Trop de publicités?PartialViewResult est utilisé pour rendre une vue partielle (fx. Juste un contrôle utilisateur). C'est assez chouette pour AJAX, c'est-à-dire
<script type="text/javascript">
$.get(
"/MyController/MyAction",
null,
function (data) { $("#target").html(data) }
);
</script>
et action
public ActionResult MyAction()
{
return PartialView("SomeView");
}
où SomeView est un contrôle utilisateur MVC, par exemple:
<div>
<%= DateTime.Now.ToString() %>
</div>
http://msmvps.com/blogs/luisabreu/archive/2008/09/16/the-mvc-platform-action-result-views.aspx
Dans la pratique, vous allez utiliser l' PartialViewResult pour outputing un petite partie de la vue. C'est pourquoi vous n'ont pas le maître d'options de la page lorsque vous traitez avec eux. Sur l'autre main, vous allez utiliser la ViewResult pour l'obtention d'un "complet". Comme vous pourrait s'y attendre, le Contrôleur de classe expose plusieurs méthodes qui permettent de vous réduisez la quantité de taper nécessaire pour instanting ces types de action de résultats.
Généralement parlant, ViewResult est pour le rendu d'une page avec, en option, maître, et PartialViewResult est utilisé pour les contrôles utilisateur (susceptibles de répondre à une requête AJAX).
Il ya plusieurs cas où vous souhaitez diviser votre point de vue dans plusieurs petits composants. Un cas d'utilisation que je travaille actuellement, j'ai un site multilingue que je voudrais recharger le contenu à l'aide d'AJAX principes.
Normalement, c'est ce que je ferais dans le cas d'un non-multilingue site est de créer un autre ActionResult pour retourner le ViewModel qui est en train de changer avec les nouveaux paramètres. J'aime utiliser un custom ActionResult que j'ai appelé JsonpResult. Le problème réside dans le fait que j'ai des étiquettes pas dans ma base de données mais dans les fichiers de Ressources. Donc, ce que j'aurais besoin de faire est en quelque sorte l'hydrate de mon fichier de Ressources de données dans le ViewModel.
Une fois les données venant de la pipe, mon AJAX rappel gère le câblage du ViewModel réponse en retour à la page HTML à l'aide de Javascript (j'utilise jQuery).
Cela fonctionne bien, mais il devient une question de facilité de maintenance. J'ai maintenant besoin non seulement de les maintenir mon original ASP.NET vue, mais j'ai aussi besoin de maintenir un ensemble de scripts qui gèrent AJAXian comportement. Si vous avez besoin d'avoir votre site SEO, alors vous avez vraiment besoin pour s'assurer que la fois Côté Serveur et Côté Client comportement travaillent tous les deux le même.
C'est là une Vue Partielle entrent en jeu pour moi. Ce que j'ai à faire est de "sortir" de la logique de données des sections où l'essentiel de la recharge se produit. La bonne chose à propos PartialView est que vous pouvez passer votre ViewData et le Modèle de la PartialView. Si votre PartialView est fortement typé pour votre ViewModel vous pouvez obtenir de l'Intellisense pour aider avec le câblage de la PartialView.
Maintenant, tout ce que je dois faire avec mon appel AJAX est d'écrire la réponse à une seule DIV plutôt que de la manipulation de données des points individuellement. Ce que cela signifie, c'est qu'il n'y aurait plus de contenu en bas du tuyau. Toutefois, le compromis est plus facile à lire et la maintenance du code.