Worin besteht in ASP.NET MVC der Unterschied zwischen:
Html.Partial
und Html.RenderPartial
Html.Action
und Html.RenderAction
Html.Partial
gibt einen String zurück. Html.RenderPartial
ruft Write
intern auf und gibt void
zurück.
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 zu demselben Ergebnis.
Während man die Ausgabe von Html.Partial
in einer Variablen speichern oder von einer Methode zurückgeben kann, kann man kann nicht dies mit Html.RenderPartial
tun. Das Ergebnis wird während der Ausführung/Auswertung in den Stream Response
geschrieben.
Dies gilt auch für Html.Action
und Html.RenderAction
.
Stellen Sie sich @ Html.Partial als HTML-Code vor, der in 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 Aufwand.
'@ Html.Partial' gibt eine HTML-codierte Zeichenfolge zurück, die inline mit dem übergeordneten Element 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);
}
Der Unterschied besteht darin, dass erstens ein MvcHtmlString
zurückgegeben wird, dass aber zweitens (Render..
) direkt auf die Antwort ausgegeben wird.
Folgendes habe ich gefunden:
Verwenden Sie RenderAction, wenn Sie kein Modell zum Senden an die Ansicht und viel HTML zum Zurückholen haben, 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 zum Zurückholen haben, der in einer Variablen gespeichert werden muss.
Verwenden Sie RenderPartial, wenn Sie ein Modell an die Ansicht senden möchten und viele HTML-Dateien in einer Variablen gespeichert werden müssen.
Verwenden Sie Teilweise, 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.
Laut mir hat @Html.RenderPartial()
eine schnellere Ausführung als @Html.Partial()
, da Html.RenderPartial eine schnelle Antwort auf Output gibt.
Denn wenn ich @Html.Partial()
verwende, dauert das Laden meiner Website länger als bei @Html.RenderPartial()
@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 ein Teilergebnis der Ansicht zurückgibt, während Sie die Methode aus der Ansicht aufrufen.
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
Partial oder RenderPartial: Keine Notwendigkeit, eine Aktionsmethode zu erstellen. Wird verwendet, wenn Daten, die in der Teilansicht angezeigt werden sollen, bereits im Modell der aktuellen Seite vorhanden sind.
Action oder RenderAction: Erfordert eine untergeordnete Aktionsmethode. Wird verwendet, wenn die in der Ansicht anzuzeigenden Daten ein unabhängiges Modell haben.
nterschiede:
Der Rückgabetyp von RenderPartial
ist void
, wobei Partial
MvcHtmlString
zurückgibt.
Syntax zum Aufrufen der Methoden Partial()
und RenderPartial()
in Razor-Ansichten
@ Html.Partial ("PartialViewName")
@ {Html.RenderPartial ("PartialViewName"); }
Syntax zum Aufrufen der Methoden Partial()
und RenderPartial()
in Webform-Ansichten
[%: Html.Partial ("PartialViewName")%]
[% Html.RenderPartial ("PartialViewName"); %]
Im Folgenden sind die 2 häufigsten Interviewfragen aufgeführt, die sich auf Partial()
und RenderPartial()
beziehen. Wann würden Sie Partial()
anstelle von RenderPartial()
verwenden und umgekehrt?
Der Hauptunterschied besteht darin, dass RenderPartial()
void zurückgibt und die Ausgabe direkt in den Ausgabestream geschrieben wird, wobei die Partial()
-Methode MvcHtmlString
zurückgibt, die einer Variablen zugewiesen und bearbeitet werden kann Falls erforderlich. Wenn die Ausgabe einer Variablen zum Bearbeiten zugewiesen werden muss, verwenden Sie Partial (), andernfalls RenderPartial ().
Welches ist besser für die Leistung?
Aus Sicht der Leistung ist es besser, direkt in den Ausgabestream zu rendern. RenderPartial()
macht genau dasselbe und ist für die Leistung besser als Partial()
.
Der Rückgabetyp von Html.RenderAction
ist void
. Dies bedeutet, dass die Antworten in View direkt gerendert werden, wobei der Rückgabetyp von Html.Action
MvcHtmlString
lautet. Sie können die Renderansicht im Controller abrufen und ändern es unter Verwendung der folgenden Methode
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();
}
}
Dadurch wird die HTML-Zeichenfolge der Ansicht zurückgegeben.
Dies gilt auch für Html.Partial
und Html.RenderPartial
Html.Partial
: Gibt MvcHtmlString
und langsam zurück
Html.RenderPartial
: Direktes Rendern/Schreiben im Ausgabestream und Rückgabe von void
und im Vergleich zu Html.Partial
sehr schnell
Für "teilweise" benutze ich es immer wie folgt:
Wenn eine Seite etwas enthalten muss, 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 view TextWriter
-Objekt. @Html.RenderPartial
Diese Methode gibt void
zurück. @Html.RenderPartial
ist schneller als @Html.Partial
Die Syntax für PartialView
:
[HttpGet]
public ActionResult AnyActionMethod
{
return PartialView();
}