Frage Html.Partial vs Html.RenderPartial & Html.Action vs Html.RenderAction


Worin unterscheiden sich in ASP.NET MVC:

  • Html.Partial und Html.RenderPartial
  • Html.Action und Html.RenderAction

923
2018-03-09 15:41


Ursprung


Antworten:


Html.Partial Gibt einen String zurück. Html.RenderPartial Anrufe Write intern und 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 selben Ergebnis.

Während man die Ausgabe von speichern kann Html.Partial in einer Variablen oder von einer Methode zurückgeben kann nicht mach das mit Html.RenderPartial. Das Ergebnis wird in die. Geschrieben Response Stream während der Ausführung / Auswertung.

das gilt auch für Html.Action und Html.RenderAction.


1113
2018-03-09 15:44



Denken Sie an @ Html.Partial als HTML-Code in die übergeordnete Seite kopiert. Stellen Sie sich @ Html.RenderPartial als ein .ascx-Benutzersteuerelement vor, das in die übergeordnete Seite integriert ist. Ein .ascx-Benutzersteuerelement hat wesentlich 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 Elterns zu.

'@ Html.RenderPartial' gibt das Äquivalent eines .ascx-Benutzersteuerelements zurück. Es erhält eine eigene Kopie des ViewDataDictionary der Seite und Änderungen, die an den ViewData des RenderPartials vorgenommen werden, wirken sich nicht auf die ViewData des Parents aus.

Mit Reflektion 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);
}

76
2018-04-18 14:36



Der Unterschied ist zuerst eins gibt ein zurück MvcHtmlString aber zweitens (Render..) gibt direkt an die Antwort aus.


54
2018-03-09 15:44



Hier ist, was ich gefunden habe:

Benutzen RenderAktion Wenn Sie kein Modell zum Senden an die Ansicht haben und viel HTML zurückgeben müssen, das nicht in einer Variablen gespeichert werden muss.

Benutzen Aktion Wenn Sie kein Modell zum Senden an die Ansicht haben und ein wenig Text zurückgeben möchten, der in einer Variablen gespeichert werden muss.

Benutzen RenderPartial Wenn Sie ein Modell haben, das an die Ansicht gesendet werden soll, wird es eine Menge HTML geben, die nicht in einer Variablen gespeichert werden muss.

Benutzen Teilweise Wenn Sie ein Modell zum Senden an die Ansicht haben, wird ein wenig Text in einer Variablen gespeichert.

RenderAktion und RenderPartial sind schneller.


29
2017-11-18 20:55



Nach mir @Html.RenderPartial() hat eine schnellere Ausführung als @Html.Partial() aufgrund Html.RenderPartial gibt eine schnelle Antwort auf Ausgabe.

Denn wenn ich benutze @Html.Partial(), meine Website braucht mehr Zeit zum Laden im Vergleich zu @Html.RenderPartial()


21
2018-02-04 04:43



@Html.Partial und @Html.RenderPartial Wenn Ihr Teilansichtsmodell der Übereinstimmung des übergeordneten Modells entspricht, müssen wir keine Aktionsmethode erstellen, um dieses aufzurufen.

@Html.Action und @Html.RenderAction Wenn Ihr Teilansichtsmodell unabhängig vom übergeordneten Modell ist, wird es grundsätzlich verwendet, wenn Sie einen Widget-Inhalt auf einer Seite anzeigen möchten. Sie müssen eine Aktionsmethode erstellen, die beim Aufruf der Methode aus der Sicht ein Teilansichtsergebnis zurückgibt.


14
2018-03-23 13:10



Mehr über die Frage:

"Wenn Html.RenderPartial () nur mit dem Namen des Partials aufgerufen wird   Ansicht, ASP.NET MVC wird an die Teilansicht das gleiche Modell übergeben und   ViewData-Dictionary-Objekte, die von der aufrufenden Ansichtsvorlage verwendet werden. "

"NerdDinner" von Professional ASP.NET MVC 1.0


12
2017-10-02 22:05



Der Rückgabetyp von Html.RenderAction ist void das bedeutet, dass die Antworten in View direkt dargestellt werden, wo der Rückgabetyp von Html.Actionist MvcHtmlString Sie können die Renderansicht im Controller abfangen und mithilfe der folgenden Methode ändern

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 wird die HTML-Zeichenfolge der Ansicht zurückgeben.

Dies gilt auch für Html.Partial und Html.RenderPartial 


8
2017-09-12 06:08



Partial oder RenderPartial: Keine Notwendigkeit, eine Aktionsmethode zu erstellen. verwenden, wenn Daten, die auf der Teilansicht angezeigt werden sollen, bereits im Modell der aktuellen Seite vorhanden sind.

Aktion oder RenderAction: Benötigt Kinderaktionsmethode. Verwenden Sie diese Option, wenn Daten in der Ansicht angezeigt werden sollen.


7
2018-02-07 12:58



Unterschiede:

  1. Der Rückgabetyp von RenderPartial ist void, wohingegen Partial kehrt zurück MvcHtmlString

  2. Syntax zum Aufrufen Partial() und RenderPartial() Methoden in Razor-Ansichten

    @ Html.Partial ("PartialViewName")
      @ {Html.RenderPartial ("PartialViewName"); }

  3. Syntax zum Aufrufen Partial() und RenderPartial() Methoden in Webformularansichten

[%: Html.Partial ("PartialViewName")%]
  [% Html.RenderPartial ("PartialViewName"); %]

Im Folgenden sind die 2 häufigsten Fragen im Zusammenhang mit Interview Partial() und RenderPartial() Wann würdest du verwenden? Partial() Über RenderPartial() und umgekehrt?

Der Hauptunterschied ist, dass RenderPartial() gibt void zurück und die Ausgabe wird direkt in den Ausgabestream geschrieben, wobei als Partial() Methode kehrt zurück MvcHtmlString, der einer Variablen zugewiesen werden kann und diese bei Bedarf manipulieren kann. Wenn Sie also die Ausgabe einer Variablen zuweisen müssen, um sie zu manipulieren, verwenden Sie Partial (), andernfalls verwenden Sie RenderPartial ().

Welcher ist besser für die Leistung?

Aus Performance-Sicht ist das Rendern direkt in den Ausgabestream besser. RenderPartial() macht genau das gleiche und ist besser für die Leistung über Partial().


6
2018-05-13 04:03