it-swarm.com.de

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

Worin besteht in ASP.NET MVC der Unterschied zwischen:

  • Html.Partial und Html.RenderPartial
  • Html.Action und Html.RenderAction
999
Ghooti Farangi

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.

1206
GvS

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);
}
82
Brett Jones

Der Unterschied besteht darin, dass erstens ein MvcHtmlString zurückgegeben wird, dass aber zweitens (Render..) direkt auf die Antwort ausgegeben wird.

55
Aliostad

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.

52
David

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()

21
iChirag

@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.

18
Jayesh Patel

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

14
Ygor Thomaz

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.

8
Anil

nterschiede:

  1. Der Rückgabetyp von RenderPartial ist void, wobei PartialMvcHtmlString zurückgibt.

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

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

  3. 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().

8
Nazmul Hasan

Der Rückgabetyp von Html.RenderAction ist void. Dies bedeutet, dass die Antworten in View direkt gerendert werden, wobei der Rückgabetyp von Html.ActionMvcHtmlString 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

8
Shivkumar

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

5
Navneet

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".

2
scgough

@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();
 }
2
Mayank