2010-11-17 5 views
27

La méthode View() permet de charger des vues partielles.View() vs. PartialView()

est la différence entre View() et PartialView() est que View() peut charger des vues et des vues partielles et PartialView() ne peut charger une vue partielle?

+24

est-ce une virelangue? – Lorenzo

Répondre

35

Il appartient à un moteur de vue de décider s'il souhaite traiter des vues partielles différentes des vues régulières.

Par exemple, dans WebFormViewEngine, il n'y a pas de différence.

Dans le nouveau ASP.NET MVC 3 RazorViewEngine, il existe quelques différences. Les pages "_viewstart.cshtml" sont les seules vues régulières car elles sont destinées à des choses telles que la configuration de pages de mise en page.

+0

Support Viewstart et prise en charge de la mise en page (Séparément) plus les différences d'exception mineures: http://completedevelopment.blogspot.com/2014/01/is-there-really-no-difference-between.html –

+0

En outre, je pense 'PartialView() 'cherchera les vues dont les emplacements sont spécifiés dans la propriété PartialViewLocationFormats de votre ViewEngine et' View() 'utilisera la propriété' ViewLocationFormats'. –

+0

@MaksimVi. c'est correct, sauf que dans les moteurs de vue par défaut de MVC, les emplacements sont tous identiques entre les vues partielles et les vues "régulières". Mais si vous les avez configurés différemment ou utilisez un autre moteur de vue, ils pourraient certainement être différents. – Eilon

3

Si vous avez Index.aspx et Index.ascx pour le même contrôleur ayant les deux méthodes peuvent aider à désambiguïser. Mais je suis d'accord qu'en général View est plus couramment utilisé. Et PartialView peut également être utilisé pour charger des vues complètes, c'est juste que c'est sémantiquement faux.

+1

Je suis à peu près certain que WebFormViewEngine utilise exactement les mêmes extensions de fichier pour les vues régulières et partielles, ce qui ne vous aidera probablement pas à vous désamorcer. – Eilon

+0

Eilon est incorrect. Les vues partielles sont .ascx et les vues sont .aspx – Chev

+1

@Chevex Si vous regardez les collections 'ViewLocationFormats' et' PartialViewLocationFormats' de WebFormViewEngine, vous verrez qu'elles sont identiques. Alors que la convetion doit utiliser .aspx pour les vues complètes et .ascx pour les vues partielles, le moteur de vue les traite de la même manière. – marcind

16

Je pense que la plus grande différence est de l'utilisation de la page _Layout:

  • PartialView(): le moteur de rasoir obtenir la vue (par exemple Index.cshtml) sans aucune page de mise en page (de _layout. cshtml).
  • View(): le moteur obtenir votre point de vue (par exemple Index.cshtml) et ensuite le contenu concatène de ce point de vue dans la page de mise en page (_layout.cshtml)
+1

+1 parce que c'est IMO vraiment le fait le plus important! Essayez d'utiliser par exemple '@ Html.Action (" SideMenu "," Menu ")' de cette façon: 'public ActionResult SideMenu() {return View(); } '. Vous vous demanderez pourquoi cela est rendu dans '_Layout' avec' RenderBody() '. Renvoyez plutôt 'PartialView()' car il n'est pas rendu via 'RenderBody()' à _Layout'. – dee

Questions connexes