Html.Partial frente a Html.RenderPartial y Html.Action frente a Html.RenderAction

Resuelto Ghooti Farangi asked hace 13 años • 13 respuestas

En ASP.NET MVC, ¿cuál es la diferencia entre:

  • Html.PartialyHtml.RenderPartial
  • Html.ActionyHtml.RenderAction
Ghooti Farangi avatar Mar 09 '11 22:03 Ghooti Farangi
Aceptado

Html.Partialdevuelve una cadena. Html.RenderPartialLlama Writeinternamente y regresa void.

El uso básico es:

// Razor syntax
@Html.Partial("ViewName")
@{ Html.RenderPartial("ViewName");  }

// WebView syntax
<%: Html.Partial("ViewName") %>
<% Html.RenderPartial("ViewName"); %>

En el fragmento anterior, ambas llamadas producirán el mismo resultado.

Si bien se puede almacenar la salida de Html.Partialen una variable o devolverla desde un método, no se puede hacer esto con Html.RenderPartial.

El resultado se escribirá en la Responsesecuencia durante la ejecución/evaluación.

Esto también se aplica a Html.Actiony Html.RenderAction.

GvS avatar Mar 09 '2011 15:03 GvS

Piense en @Html.Partial como un código HTML copiado en la página principal. Piense en @Html.RenderPartial como un control de usuario .ascx incorporado a la página principal. Un control de usuario .ascx tiene mucha más sobrecarga.

'@Html.Partial' devuelve una cadena codificada en HTML que se construye en línea con el padre. Accede al modelo de los padres.

'@Html.RenderPartial' devuelve el equivalente de un control de usuario .ascx. Obtiene su propia copia del ViewDataDictionary de la página y los cambios realizados en el ViewData de RenderPartial no afectan el ViewData del padre.

Usando la reflexión encontramos:

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);
}
CodeBon avatar Apr 18 '2012 14:04 CodeBon

Esto es lo que he encontrado:

Utilice RenderAction cuando no tenga un modelo para enviar a la vista y tenga mucho HTML para recuperar que no necesita almacenarse en una variable.

Utilice Acción cuando no tenga un modelo para enviar a la vista y tenga un poco de texto para recuperar que deba almacenarse en una variable.

Utilice RenderPartial cuando tenga un modelo para enviar a la vista y habrá una gran cantidad de html que no sea necesario almacenar en una variable.

Utilice Parcial cuando tenga un modelo para enviar a la vista y habrá un poco de texto que deberá almacenarse en una variable.

RenderAction y RenderPartial son más rápidos.

David avatar Nov 18 '2015 20:11 David