Was ist in ASP.NET MVC der Unterschied zwischen:
Html.Partial
undHtml.RenderPartial
Html.Action
undHtml.RenderAction
Was ist in ASP.NET MVC der Unterschied zwischen:
Html.Partial
und Html.RenderPartial
Html.Action
und Html.RenderAction
Antworten:
Html.Partial
gibt einen String zurück. Html.RenderPartial
ruft Write
intern an und kehrt zurück void
.
Die grundlegende Verwendung ist:
// Razor syntax
@Html.Partial("ViewName")
@{ Html.RenderPartial("ViewName"); }
// WebView syntax
<%: Html.Partial("ViewName") %>
<% Html.RenderPartial("ViewName"); %>
Im obigen Snippet führen beide Aufrufe zum gleichen Ergebnis.
Während man die Ausgabe von Html.Partial
in einer Variablen speichern oder von einer Methode zurückgeben kann, kann man dies nicht mit tun Html.RenderPartial
.
Das Ergebnis wird Response
während der Ausführung / Auswertung in den Stream geschrieben .
Dies gilt auch für Html.Action
und Html.RenderAction
.
Html.Partial()
wurde entwickelt, um eine flüssigere Syntax mit Razor zu haben. Wie @Vlad sagte, Html.RenderPartial()
ist effizienter.
Stellen Sie sich @ Html.Partial als HTML-Code vor, der auf die übergeordnete Seite kopiert wird. Stellen Sie sich @ Html.RenderPartial als ein .ascx-Benutzersteuerelement vor, das in die übergeordnete Seite integriert ist. Ein .ascx-Benutzersteuerelement hat weitaus mehr Overhead.
'@ Html.Partial' gibt eine HTML-codierte Zeichenfolge zurück, die inline mit dem übergeordneten Zeichen erstellt wird . Es greift auf das Modell des Elternteils zu.
'@ Html.RenderPartial' gibt das Äquivalent eines .ascx-Benutzersteuerelements zurück. Es erhält eine eigene Kopie des ViewDataDictionary der Seite, und Änderungen an den ViewData des RenderPartials wirken sich nicht auf die ViewData des übergeordneten Elements aus.
Mit Reflexion finden wir:
public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model, ViewDataDictionary viewData)
{
MvcHtmlString mvcHtmlString;
using (StringWriter stringWriter = new StringWriter(CultureInfo.CurrentCulture))
{
htmlHelper.RenderPartialInternal(partialViewName, viewData, model, stringWriter, ViewEngines.Engines);
mvcHtmlString = MvcHtmlString.Create(stringWriter.ToString());
}
return mvcHtmlString;
}
public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName)
{
htmlHelper.RenderPartialInternal(partialViewName, htmlHelper.ViewData, null, htmlHelper.ViewContext.Writer, ViewEngines.Engines);
}
Partial
Rendern in einen Puffer nicht bedeutet, dass es asynchron gerendert wird - im Gegenteil -, kann ich nicht sehen, wie Sie behaupten können, RenderPartial
"ressourcenintensiver" zu sein.
Folgendes habe ich gefunden:
Verwenden Sie RenderAction, wenn Sie kein Modell zum Senden an die Ansicht haben und viel HTML zurückbringen müssen, das nicht in einer Variablen gespeichert werden muss.
Verwenden Sie Aktion, wenn Sie kein Modell zum Senden an die Ansicht haben und ein wenig Text zurückbringen möchten, der in einer Variablen gespeichert werden muss.
Verwenden Sie RenderPartial, wenn Sie ein Modell an die Ansicht senden möchten und es viele HTML- Dateien gibt, die nicht in einer Variablen gespeichert werden müssen.
Verwenden Sie Partial, wenn Sie ein Modell an die Ansicht senden möchten und ein wenig Text in einer Variablen gespeichert werden muss.
RenderAction und RenderPartial sind schneller.
@Html.Partial
und @Html.RenderPartial
werden verwendet, wenn Ihr Teilansichtsmodell der Entsprechung des übergeordneten Modells entspricht. Wir müssen keine Aktionsmethode erstellen, um dies aufzurufen.
@Html.Action
und @Html.RenderAction
werden verwendet, wenn Ihr Teilansichtsmodell vom übergeordneten Modell unabhängig ist. Grundsätzlich wird es verwendet, wenn Sie Inhalte vom Typ Widget auf einer Seite anzeigen möchten. Sie müssen eine Aktionsmethode erstellen, die beim Aufrufen der Methode aus der Ansicht ein Teilansichtsergebnis zurückgibt.
Mehr zur Frage:
"Wenn Html.RenderPartial () nur mit dem Namen der Teilansicht aufgerufen wird, übergibt ASP.NET MVC an die Teilansicht dieselben Model- und ViewData-Wörterbuchobjekte, die von der aufrufenden Ansichtsvorlage verwendet werden."
"NerdDinner" von Professional ASP.NET MVC 1.0
Der Rückgabetyp Html.RenderAction
ist , void
dass Mittel direkt die Antworten in Ansicht rendert , wo der Rückgabetyp Html.Action
sind MvcHtmlString
Sie können ihre Render - Ansicht in der Steuerung fangen und ändern Sie es durch folgende Verfahren unter Verwendung von
protected string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
Dies gibt die HTML-Zeichenfolge der Ansicht zurück.
Dies gilt auch für Html.Partial
undHtml.RenderPartial
Partial oder RenderPartial: Es muss keine Aktionsmethode erstellt werden. Verwenden Sie diese Option, wenn Daten, die in der Teilansicht angezeigt werden sollen, bereits im Modell der aktuellen Seite vorhanden sind.
Aktion oder RenderAction: Erfordert eine untergeordnete Aktionsmethode. Verwenden Sie diese Option, wenn die in der Ansicht anzuzeigenden Daten ein unabhängiges Modell haben.
Unterschiede:
Der Rückgabetyp von RenderPartial
ist void
, wobei als Partial
RückgabeMvcHtmlString
Syntax zum Aufrufen Partial()
und RenderPartial()
Methoden in Razor-Ansichten
@ Html.Partial ("PartialViewName")
@ {Html.RenderPartial ("PartialViewName"); }}
Syntax zum Aufrufen Partial()
und RenderPartial()
Methoden in Webformularansichten
[%: Html.Partial ("PartialViewName")%]
[% Html.RenderPartial ("PartialViewName"); %]
Im Folgenden sind die zwei gemeinsamen Interview Fragen zu Partial()
und RenderPartial()
Wann möchten Sie verwenden Partial()
über RenderPartial()
und umgekehrt?
Der Hauptunterschied besteht darin, dass RenderPartial()
void zurückgegeben wird und die Ausgabe direkt in den Ausgabestream geschrieben wird, wo die Partial()
Methode zurückgibt MvcHtmlString
, die einer Variablen zugewiesen und bei Bedarf bearbeitet werden kann. Wenn Sie die Ausgabe einer Variablen zuweisen müssen, um sie zu bearbeiten, verwenden Sie Partial (), andernfalls RenderPartial ().
Welches ist besser für die Leistung?
Aus Sicht der Leistung ist das Rendern direkt in den Ausgabestream besser. RenderPartial()
macht genau das gleiche und ist besser für die Leistung vorbei Partial()
.
Für "teilweise" benutze ich es immer wie folgt:
Wenn Sie etwas in eine Seite aufnehmen müssen, das Sie über den Controller aufrufen müssen (wie bei einem Ajax-Aufruf), verwenden Sie "Html.RenderPartial".
Wenn Sie ein 'statisches' Include haben, das nicht per se mit einem Controller verknüpft ist und sich beispielsweise nur im 'freigegebenen' Ordner befindet, verwenden Sie "HTML.partial".
@Html.Partial
Gibt die Ansicht in einer HTML-codierten Zeichenfolge zurück und verwendet dasselbe Ansichtsobjekt TextWriter
.
@Html.RenderPartial
Diese Methode gibt zurück void
.
@Html.RenderPartial
ist schneller als@Html.Partial
Die Syntax für PartialView
:
[HttpGet]
public ActionResult AnyActionMethod
{
return PartialView();
}