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

93

Was ist die geeignete Methode zum Rendern einer untergeordneten Vorlage?

Und was ist der Unterschied? Beide scheinen für mich zu arbeiten.

Und warum funktioniert das @Html.RenderPartial()nicht mehr?

Evgenyt
quelle

Antworten:

127
Html.Partial("MyView")

Rendert die "MyView" -Ansicht in eine MvcHtmlString. Es folgt den Standardregeln für die Ansichtssuche (dh überprüfen Sie das aktuelle Verzeichnis und dann das SharedVerzeichnis).

Html.RenderPartial("MyView")

Tut das Gleiche wie Html.Partial(), außer dass es seine Ausgabe direkt in den Antwortstrom schreibt. Dies ist effizienter, da der Ansichtsinhalt nicht im Speicher gepuffert wird. Da die Methode jedoch keine Ausgabe zurückgibt, @Html.RenderPartial("MyView")funktioniert sie nicht. Sie müssen den Aufruf stattdessen in einen Codeblock einschließen : @{Html.RenderPartial("MyView");}.

RenderPage("MyView.cshtml")

Rendert die angegebene Ansicht (identifiziert durch Pfad und Dateiname anstelle des Ansichtsnamens) direkt in den Antwortstrom, z Html.RenderPartial(). Sie können der Ansicht ein beliebiges Modell hinzufügen, indem Sie es als zweiten Parameter hinzufügen

RenderPage("MyView.cshtml", MyModel)
Annabelle
quelle
8
Gibt es Metriken zum Effizienzgewinn von @ {Html.RenderPartial ("MyView");} gegenüber @ Html.RenderPartial ("MyView")?
Faust
@Faust meintest du Partial vd RenderPartial?
Cacho Santa
1
@ Cacho: Ja, mein Kommentar sollte lauten @Html.Partial("MyView")vs.@{Html.RenderPartial("MyView");}
Faust
2
Kleine Korrektur: Der zweite Parameter in RenderPage () ist nicht das Modell, sondern ein param [] -Objekt, auf das über die PageData-Eigenschaft zugegriffen wird. Es scheint wie oben zu funktionieren, da das Modell von der "übergeordneten" Seite standardmäßig an das "untergeordnete" übergeben wird. msdn.microsoft.com/en-us/library/…
Jon
Gibt es eine Möglichkeit, eine vollständige Seite entlang ihres Modells durch Aufrufen zu verschachteln RenderPage? Ich möchte eine andere Seite verschachteln, indem ich einen bestimmten Abfrageparameter spezifiziere, der wiederum die Daten auf dieser Seite filtert und außerdem das eigene Layout entfernt.
Shimmy Weitzhandler
17

ich bevorzuge

@RenderPage("_LayoutHeader.cshtml")

Über

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

Nur weil die Syntax einfacher und lesbarer ist. Davon abgesehen scheint es keine funktionalen Unterschiede zu geben.

BEARBEITEN: Ein Vorteil von RenderPartial ist, dass Sie nicht den gesamten Pfad oder die Dateierweiterung angeben müssen, um die allgemeinen Stellen automatisch zu durchsuchen.

Ryan Sampson
quelle
1
Ich denke das sollte ein Kommentar sein, keine Antwort. Auch stimme ich RenderPagewegen der Syntax zu.
Iman Mahmoudinasab
6

Die RenderPartial- Methode gibt kein HTML-Markup wie die meisten anderen Hilfsmethoden zurück . Stattdessen wird der Inhalt direkt in den Antwortstrom geschrieben, weshalb wir ihn wie eine vollständige Zeile von C # mit einem Semikolon aufrufen müssen.

Dies ist etwas effizienter als das Puffern des gerenderten HTML-Codes aus der Teilansicht, da er ohnehin in den Antwortstrom geschrieben wird. Wenn Sie eine konsistentere Syntax bevorzugen, können Sie die Html.Partial- Methode verwenden, die genau das Gleiche wie die RenderPartial- Methode tut , jedoch ein HTML-Fragment zurückgibt und als @ Html.Partial ("Produkt", S.) verwendet werden kann.

Omid Shariati
quelle
2

Wir können das Modell auch mit Teilansichten übergeben. @ Html.Partial ("MyView", "MyModel");

Bayram
quelle
0
@RenderPages() 

Das Obige funktioniert nicht in ASP.NET MVC. Es funktioniert nur in Webseiten.

@Html.Partial("_Footer")

Sie müssen das oben genannte in ASP.NET MVC verwenden.

Umar Aftab
quelle