2010-04-28 26 views
129

Aparte del tipo que devuelve y el hecho de que se llame de manera diferente, por supuesto,¿Cuál es la diferencia (si existe) entre Html.Partial (ver, modelo) y Html.RenderPartial (ver, modelo) en MVC2?

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

Si son diferentes, ¿por qué llamar a uno más que el otro?
Las definiciones:

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

Respuesta

156

La única diferencia es que Partial devuelve un MvcHtmlString, y debe ser llamado dentro <%= %>, mientras que RenderPartial rendimientos void y hace directamente a la vista.

Si mira source code, verá que ambos llaman al mismo método interno, pasando un StringWriter para que se muestre.

Llamaría al Partial si desea ver, guardar o manipular el código HTML generado en lugar de escribirlo en la página.

+0

Ok, entonces no hay :) como pensé, puedo usarlos a la perfección, supongo. Gracias :) –

+40

no, la diferencia es el tipo de devolución, como dijo SLaks. Esto no es trivial. En lo que respecta al rendimiento, se ha afirmado que la renderización directa a la secuencia de salida es mejor (que fue la razón por la que fueron w/the void RenderPartial para comenzar). Parcial es principalmente útil (imo) en las pruebas, aunque como SLaks dijo que puede haber algunos lugares en los que desee manipular el resultado antes de representarlo en el código de producción. Ellos son raros, imo. – Paul

+41

Parcial también es útil cuando desea obtener el resultado de una vista en el controlador. Esto se puede usar para usar una vista para formatear un correo electrónico. – Samg

4

HTML.RenderPartial no devuelve el marcado HTML como la mayoría de los otros métodos de ayuda. En lugar de, el método escribe contenido directamente en la secuencia de respuesta, por lo que el desarrollador debe llamarlo como una línea completa de C#, utilizando un punto y coma. Esto es un poco más efectivo que el almacenamiento en búfer del HTML representado desde la vista parcial, ya que se escribirá de todos modos en la secuencia de respuesta.

+1

-1 Al copiar desde otra fuente, al menos dé crédito. Esta es una copia flagrante palabra por palabra de Pro ASP.NET MVC 3 Framework (o al menos una edición más reciente). – Robotron

Cuestiones relacionadas