web-dev-qa-db-fra.com

Razor: @ Html.Partial () vs @RenderPage ()

Quelle est la manière appropriée de rendre un modèle enfant?

Et quelle est la différence? Les deux semblent fonctionner pour moi.

Et pourquoi @Html.RenderPartial() ne fonctionne plus?

92
Evgenyt
Html.Partial("MyView")

Rend la vue "MyView" en MvcHtmlString. Il suit les règles standard pour la recherche d’affichage (c’est-à-dire vérifier le répertoire actuel, puis le répertoire Shared).

Html.RenderPartial("MyView")

Fait la même chose que Html.Partial(), sauf qu'il écrit directement sa sortie dans le flux de réponse. Cela est plus efficace, car le contenu de la vue n'est pas mis en mémoire tampon. Cependant, étant donné que la méthode ne renvoie aucune sortie, @Html.RenderPartial("MyView") ne fonctionnera pas. Vous devez envelopper l'appel dans un bloc de code à la place: @{Html.RenderPartial("MyView");}.

RenderPage("MyView.cshtml")

Rend la vue spécifiée (identifiée par le chemin et le nom du fichier plutôt que par le nom de la vue) directement dans le flux de réponses, comme Html.RenderPartial(). Vous pouvez fournir n'importe quel modèle que vous aimez à la vue en l'incluant comme second paramètre.

RenderPage("MyView.cshtml", MyModel)
126
Annabelle

Je préfère

@RenderPage("_LayoutHeader.cshtml")

Plus de

@{ Html.RenderPartial("_LayoutHeader"); }

Seulement parce que la syntaxe est plus simple et plus lisible. En dehors de cela, il ne semble pas y avoir de différences de fonctionnalités.

ÉDITER: L’un des avantages de RenderPartial est que vous n’avez pas à spécifier le chemin complet ou l’extension de fichier, il recherchera automatiquement les lieux communs.

17
Ryan Sampson

La méthode RenderPartial ne renvoie pas le balisage HTML comme la plupart des autres méthodes auxiliaires. Au lieu de cela, il écrit le contenu directement dans le flux de réponses, raison pour laquelle nous devons l'appeler comme une ligne complète de C #, en utilisant un point-virgule.

Cela est légèrement plus efficace que la mise en mémoire tampon du code HTML rendu à partir de la vue partielle, car il sera néanmoins écrit dans le flux de réponses. Si vous préférez une syntaxe plus cohérente, vous pouvez utiliser la méthode Html.Partial, qui fait exactement la même chose que la méthode RenderPartial, mais renvoie un fragment HTML et peut être utilisée. comme @ Html.Partial ("Produit", p).

6
Omid Shariati

Nous pouvons également passer le modèle en utilisant des vues partielles. @ Html.Partial ("MyView", "MyModel");

2
bayram
@RenderPages() 

Ce qui précède ne fonctionne pas dans ASP.NET MVC. Cela ne fonctionne que dans les pages Web.

@Html.Partial("_Footer")

Vous devrez utiliser ce qui précède dans ASP.NET MVC.

0
Umar Aftab