2010-04-28 23 views
129

tipo diverso da quello restituisce e il fatto che si chiama in modo diverso, naturalmenteQual è la differenza (se esiste) tra Html.Partial (vista, modello) e Html.RenderPartial (vista, modello) in MVC2?

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

Se sono diversi, perché si dovrebbe chiamare uno piuttosto che l'altro?
Le definizioni:

// 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); 
    } 
} 

risposta

156

L'unica differenza è che Partial restituisce un MvcHtmlString, ed essere richiamati all'interno <%= %>, considerando RenderPartial rendimenti void e rende direttamente alla vista.

Se si guarda al source code, vedrai che entrambi definiscono lo stesso metodo interno, passando uno StringWriter per farlo rendere al.

Si chiamerebbe Partial se si desidera visualizzare, salvare o manipolare l'HTML generato anziché scriverlo nella pagina.

+0

Ok, quindi non ce ne sono :) come pensavo, posso usarli senza problemi, credo. Grazie :) –

+40

no, la differenza è il tipo di ritorno, come ha detto SLaks. Questo non è banale. Per quanto riguarda le prestazioni, è stato affermato che il rendering direttamente nel flusso di output è migliore (il motivo per cui sono andati con Vuoto RenderPartial all'inizio). Parziale è per lo più utile (imo) nei test, anche se come SLaks ha detto che ci possono essere alcune aree in cui si desidera manipolare l'output prima di renderlo nel codice di produzione. Sono solo rari, imo. – Paul

+41

Parziale è anche utile quando si desidera ottenere l'output di una vista nel controller. Questo può essere usato per usare una vista per formattare una email. – Samg

4

HTML.RenderPartial non restituisce il markup HTML come la maggior parte degli altri metodi di supporto. Al posto di, il metodo scrive il contenuto direttamente nel flusso di risposta, motivo per cui lo sviluppatore deve chiamarlo come un'intera riga di C#, usando un punto e virgola. Questo è leggermente più efficace del buffering del rendering HTML dalla vista parziale, poiché sarà comunque scritto nel flusso di risposta.

+1

-1 Quando si copia da un'altra fonte, almeno dare credito. Si tratta di una sfacciata copia parola per parola da Pro ASP.NET MVC 3 Framework (o almeno una versione più recente). – Robotron

Problemi correlati