2010-04-28 13 views
129

Anders als die Art er zurückgeht und die Tatsache, dass man es natürlich anders nennenWas ist der Unterschied (falls vorhanden) zwischen Html.Partial (Ansicht, Modell) und Html.RenderPartial (Ansicht, Modell) in MVC2?

<% Html.RenderPartial(...); %> 
<%= Html.Partial(...) %> 

Wenn sie unterschiedlich sind, warum Sie eine eher als das andere nennen würde?
Die Definitionen:

// Type: System.Web.Mvc.Html.RenderPartialExtensions 
// Assembly: System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
// Assembly location: C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 2\Assemblies\System.Web.Mvc.dll 

using System.Web.Mvc; 

namespace System.Web.Mvc.Html 
{ 
    public static class RenderPartialExtensions 
    { 
     public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName); 
     public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, ViewDataDictionary viewData); 
     public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, object model); 

     public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, object model, 
            ViewDataDictionary viewData); 
    } 
} 

// Type: System.Web.Mvc.Html.PartialExtensions 
// Assembly: System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
// Assembly location: C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 2\Assemblies\System.Web.Mvc.dll 

using System.Web.Mvc; 

namespace System.Web.Mvc.Html 
{ 
    public static class PartialExtensions 
    { 
     public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName); 

     public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, 
             ViewDataDictionary viewData); 

     public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model); 

     public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model, 
             ViewDataDictionary viewData); 
    } 
} 

Antwort

156

Der einzige Unterschied besteht darin, dass eine PartialMvcHtmlString zurückkehrt, und muss innerhalb <%= %>, während RenderPartial kehrt void und rendert direkt zu der Ansicht aufgerufen werden.

Wenn Sie sich die source code ansehen, werden Sie sehen, dass beide dieselbe interne Methode aufrufen und einen StringWriter übergeben, für den sie gerendert werden soll.

Sie würden Partial aufrufen, wenn Sie das generierte HTML anzeigen, speichern oder bearbeiten möchten, anstatt es auf die Seite zu schreiben.

+0

Ok, also gibt es keine :) wie ich dachte, ich kann sie nahtlos verwenden, denke ich. Danke :) –

+40

Nein, der Unterschied ist der Rückgabetyp, wie SLaks sagte. Das ist nicht trivial. Performance-mäßig wurde behauptet, dass das Rendern direkt in den Ausgabestream besser ist (weshalb sie mit dem void RenderPartial gestartet wurden). Partiell ist meistens nützlich (imo) beim Testen, obwohl SLaks sagte, dass es einige Stellen gibt, an denen Sie die Ausgabe manipulieren wollen, bevor Sie sie im Produktionscode rendern. Sie sind nur selten, imo. – Paul

+41

Teilweise ist auch hilfreich, wenn Sie die Ausgabe einer Ansicht im Controller abrufen möchten. Dies kann verwendet werden, um eine Ansicht zum Formatieren einer E-Mail zu verwenden. – Samg

4

HTML.RenderPartial gibt kein HTML-Markup wie die meisten anderen Hilfsmethoden zurück. Statt dessen schreibt die Methode den Inhalt direkt in den Antwort-Stream, weshalb der Entwickler ihn als eine ganze Zeile von C# mit einem Semikolon bezeichnen muss. Dies ist etwas effektiver als das Puffern des gerenderten HTML aus der Teilansicht, da es trotzdem in den Antwortstream geschrieben wird.

+1

-1 Wenn du von einer anderen Quelle kopierst, gib wenigstens einen Kredit. Dies ist eine offenkundige Wort-für-Wort-Kopie von Pro ASP.NET MVC 3 Framework (oder mindestens einer neueren Version). – Robotron

Verwandte Themen