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

Html.Partial devuelve una Cadena. Html.RenderPartial llama 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.

Si bien uno puede almacenar el resultado de Html.Partial en una variable o devolverlo desde un método, no se puede hacer esto con Html.RenderPartial . El resultado se escribirá en el flujo de Response durante la ejecución / evaluación.

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

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

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

Esto es lo que he encontrado:

Use RenderAction cuando no tenga un modelo para enviar a la vista y tenga una gran cantidad de html para devolver que no necesita almacenarse en una variable.

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

Use RenderPartial cuando tenga un modelo para enviar a la vista y habrá una gran cantidad de html que no necesita almacenarse 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.

Según me @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()

@Html.Partial y @Html.RenderPartial se utilizan cuando su modelo de vista parcial es la correspondencia del modelo principal, no es necesario 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.

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 de diccionario de modelo y ViewData utilizados por la plantilla de vista de llamada.”

“NerdDinner” de Professional ASP.NET MVC 1.0

El tipo de retorno de Html.RenderAction es void que significa que representa directamente las respuestas en Ver, donde el tipo de retorno de Html.Action es MvcHtmlString Puede ver su vista de renderizado en el controlador y modificarlo mediante 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

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.

Diferencias

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

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

    @ Html.Partial (“PartialViewName”)
    @ {Html.RenderPartial (“PartialViewName”); }

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

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

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

La principal diferencia es que RenderPartial() devuelve nulo y la salida se escribirá directamente en la secuencia de salida, mientras que el método Partial() 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 que Partial() .

Html.Partial : devuelve MvcHtmlString y ralentiza

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

Para “parcial” siempre lo uso de la siguiente manera:

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

Si tiene una inclusión ‘estática’ que no está vinculada a un controlador per se y solo en la carpeta ‘compartida’ por ejemplo, use “HTML.partial”

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

La syntax para PartialView :

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