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


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

  • Html.Partial y Html.RenderPartial
  • Html.Action y Html.RenderAction

923
2018-03-09 15:41


origen


Respuestas:


Html.Partial devuelve una cadena. Html.RenderPartial llamadas 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 arrojarán el mismo resultado.

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

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


1113
2018-03-09 15:44



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 mucha más sobrecarga.

'@ 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 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);
}

76
2018-04-18 14:36



La diferencia es primero uno devuelve un MvcHtmlString pero segundo (Render..) salidas directamente a la respuesta.


54
2018-03-09 15:44



Esto es lo que he encontrado:

Utilizar RenderAction cuando no tiene un modelo para enviar a la vista y tiene una gran cantidad de html para traer de vuelta que no necesita almacenarse en una variable.

Utilizar Acción cuando no tiene un modelo para enviar a la vista y tiene que devolver un poco de texto que debe almacenarse en una variable.

Utilizar RenderPartial cuando tiene un modelo para enviar a la vista y habrá una gran cantidad de html que no necesita almacenarse en una variable.

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

RenderAction y RenderPartial son mas rapidos


29
2017-11-18 20:55



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 la Salida.

Porque cuando uso @Html.Partial(), mi sitio web toma más tiempo para cargar en comparación con @Html.RenderPartial()


21
2018-02-04 04:43



@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 tipo de widget contenido en la página. Debe crear un método de acción que devuelva un resultado de vista parcial al invocar el método desde la vista.


14
2018-03-23 13:10



Más sobre la pregunta:

"Cuando se llama a Html.RenderPartial () con solo el nombre del parcial   vista, ASP.NET MVC pasará a la vista parcial el mismo Modelo y   Objetos de diccionario ViewData utilizados por la plantilla de vista de llamada. "

"NerdDinner" de Professional ASP.NET MVC 1.0


12
2017-10-02 22:05



El tipo de devolución de Html.RenderAction es void eso significa que representa directamente las respuestas en Ver, donde el tipo de retorno de Html.Actiones MvcHtmlString Puede ver su vista de representación 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
2017-09-12 06:08



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 infantil. usar cuando los datos para mostrar en la vista tienen un modelo independiente.


7
2018-02-07 12:58



Diferencias

  1. El tipo de devolución de RenderPartial es void, donde como Partial devoluciones MvcHtmlString

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

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

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

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

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

La principal diferencia es que RenderPartial() devuelve vacío y la salida se escribirá directamente en la secuencia de salida, donde como Partial() método devuelve MvcHtmlString, que se puede asignar a una variable y manipularla si es necesario. Entonces, cuando hay una necesidad de asignar la salida a una variable para manipularla, entonces use Partial (), sino use RenderPartial ().

¿Cuál es mejor para el rendimiento?

Desde una perspectiva de rendimiento, es mejor renderizar directamente a la secuencia de salida. RenderPartial() hace exactamente lo mismo y es mejor para el rendimiento Partial().


6
2018-05-13 04:03