it-swarm-es.tech

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

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

  • Html.Partial y Html.RenderPartial
  • Html.Action y Html.RenderAction
981
Ghooti Farangi

Html.Partial devuelve una cadena. Html.RenderPartial llama a Write internamente y devuelve 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 darán el mismo resultado.

Mientras que uno puede almacenar la salida de Html.Partial en una variable o devolverla desde un método, uno no puede hacerlo con Html.RenderPartial. El resultado se escribirá en el flujo Response durante la ejecución/evaluación.

Esto también se aplica a Html.Action y Html.RenderAction.

1180
GvS

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

'@ Html.Partial' devuelve una cadena codificada 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 de ViewDataDictionary de la página y los cambios realizados en ViewData de RenderPartial no afectan a ViewData de los padres.

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

La diferencia es que primero se devuelve un MvcHtmlString pero el segundo (Render..) se envía directamente a la respuesta.

55
Aliostad

Esto es lo que he encontrado:

Use RenderAction cuando no tenga un modelo para enviar a la vista y tenga muchos html para recuperar que no sea necesario almacenar en una variable.

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

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

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

RenderAction y RenderPartial son más rápidos.

49
David

Según yo, @Html.RenderPartial() tiene una ejecución más rápida que @Html.Partial() debido a Html.RenderPartial da una respuesta rápida a Output.

Porque cuando uso @Html.Partial(), mi sitio web tarda más en cargarse en comparación con @Html.RenderPartial()

21
iChirag

@Html.Partial y @Html.RenderPartial se usan cuando su modelo de vista parcial es la correspondencia del modelo principal, no necesitamos crear ningún método de acción para llamar a esto.

@Html.Action y @Html.RenderAction se usan cuando su modelo de vista parcial es independiente del modelo principal, básicamente se usa cuando desea mostrar cualquier contenido de tipo de widget en la página. Debe crear un método de acción que devuelva un resultado de vista parcial mientras llama al método desde la vista.

18
Jayesh Patel

Más sobre la pregunta:

"Cuando se llama a Html.RenderPartial () con solo el nombre de la vista parcial, ASP.NET MVC pasará a la vista parcial los mismos objetos del Modelo y del Diccionario de Datos de Vista utilizados por la plantilla de vista de llamada".

"NerdDinner" de Professional ASP.NET MVC 1.0

14
Ygor Thomaz

Parcial o RenderPartial: No es necesario crear un método de acción. usar cuando los datos que se mostrarán en la vista parcial ya están presentes en el modelo de la página actual.

Acción o RenderAction: Requiere método de acción secundario. Se usa cuando los datos que se muestran en la vista tienen un modelo independiente.

8
Anil

Diferencias:

  1. El tipo de retorno de RenderPartial es void, mientras que Partial devuelve MvcHtmlString

  2. Sintaxis para invocar los métodos Partial() y RenderPartial() en las vistas de Razor

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

  3. Sintaxis para invocar los métodos Partial() y RenderPartial() en vistas de formulario web

[%: Html.Partial ("PartialViewName")%]
[% Html.RenderPartial ("PartialViewName"); %]

Las siguientes son las 2 preguntas comunes de la entrevista relacionadas con Partial() y RenderPartial() ¿Cuándo usaría Partial() sobre RenderPartial() y viceversa?

La principal diferencia es que RenderPartial() devuelve void y la salida se escribirá directamente en el flujo de salida, donde el método Partial() devuelve MvcHtmlString, que puede asignarse a una variable y manipularla si es necesario. Entonces, cuando hay una necesidad de asignar la salida a una variable para manipularla, luego use Parcial (), de lo contrario use RenderPartial ().

¿Cuál es mejor para el rendimiento?

Desde una perspectiva de rendimiento, la representación directa a la secuencia de salida es mejor. RenderPartial() hace exactamente lo mismo y es mejor para el rendimiento sobre Partial().

8
Nazmul Hasan

El tipo de retorno de Html.RenderAction es void, lo que significa que representa directamente las respuestas en la Vista, donde el tipo de retorno de Html.Action es MvcHtmlString Puede capturar su vista de render en el controlador y modificarla utilizando el siguiente método

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

Esto devolverá la cadena HTML de la vista.

Esto también es aplicable a Html.Partial y Html.RenderPartial

8
Shivkumar

Html.Partial: devuelve MvcHtmlString y lento

Html.RenderPartial: renderiza/escribe directamente en el flujo de salida y devuelve void y es muy rápido en comparación con Html.Partial

5
Navneet

Para "parcial" siempre lo uso de la siguiente manera:

Si hay algo que debe incluir en una página que necesita ir a través del controlador (como lo haría con una llamada Ajax), use "Html.RenderPartial".

Si tiene una inclusión 'estática' que no está vinculada a un controlador por sí misma y solo en la carpeta 'compartida', por ejemplo, use "HTML.partial"

2
scgough

@Html.Partial devuelve la vista en una cadena codificada en HTML y usa el mismo objeto TextWriter de la misma vista. @Html.RenderPartial este método devuelve void. @Html.RenderPartial es más rápido que @Html.Partial

La sintaxis de PartialView:

 [HttpGet] 
 public ActionResult AnyActionMethod
 {
     return PartialView();
 }
2
Mayank