with net mvc example data asp .net asp.net-mvc partial-views renderpartial renderaction

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



render partial view mvc 5 example (13)

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

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

El tipo de retorno de Html.RenderAction es void 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 modificarlo 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


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.

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


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


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


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"


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


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


@Html.Partial devuelve la vista en una cadena codificada en HTML y usa el mismo objeto TextWriter 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(); }


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


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


Html.Partial devuelve una cadena. Html.RenderPartial calls 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 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 .


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 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 Partial (), de lo contrario use RenderPartial ().

¿Cuál es mejor para el rendimiento?

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


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 hijo. utilizar cuando los datos que se muestran en la vista tienen un modelo independiente.