.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
yHtml.RenderPartial
-
Html.Action
yHtml.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:
El tipo de retorno de
RenderPartial
esvoid
, mientras quePartial
devuelveMvcHtmlString
Sintaxis para invocar los métodos
Partial()
yRenderPartial()
en vistas de Razor@ Html.Partial ("PartialViewName")
@ {Html.RenderPartial ("PartialViewName"); }Sintaxis para invocar los métodos
Partial()
yRenderPartial()
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.