Razor: @ Html.Partial () vs @RenderPage ()

¿Cuál es la forma adecuada de renderizar una plantilla hija?

¿Y cuál es la diferencia? Ambos parecen funcionar para mí.

¿Y por qué @Html.RenderPartial() ya no funciona?

 Html.Partial("MyView") 

Renderiza la vista “MyView” a una MvcHtmlString . Sigue las reglas estándar para la búsqueda de vistas (es decir, verifica el directorio actual, luego verifica el directorio Shared ).

 Html.RenderPartial("MyView") 

Hace lo mismo que Html.Partial() , excepto que escribe su resultado directamente en la secuencia de respuesta. Esto es más eficiente, porque el contenido de la vista no está almacenado en la memoria. Sin embargo, como el método no devuelve ningún resultado, @Html.RenderPartial("MyView") no funcionará. En su lugar, debe envolver la llamada en un bloque de código: @{Html.RenderPartial("MyView");} .

 RenderPage("MyView.cshtml") 

Representa la vista especificada (identificada por ruta y nombre de archivo en lugar de por nombre de vista) directamente en la secuencia de respuesta, como Html.RenderPartial() . Puede suministrar cualquier modelo que desee a la vista incluyéndolo como un segundo parámetro

 RenderPage("MyView.cshtml", MyModel) 

yo prefiero

 @RenderPage("_LayoutHeader.cshtml") 

Encima

 @{ Html.RenderPartial("_LayoutHeader"); } 

Solo porque la syntax es más fácil y más legible. Aparte de eso, no parece haber diferencias en cuanto a la funcionalidad.

EDITAR: Una ventaja de RenderPartial es que no tiene que especificar la ruta completa o la extensión de archivo que buscará en los lugares comunes automáticamente.

El método RenderPartial no devuelve el marcado HTML como la mayoría de los demás métodos de ayuda. En su lugar, escribe contenido directamente en la secuencia de respuesta, por lo que debemos llamarlo como una línea completa de C #, utilizando un punto y coma.

Esto es ligeramente más eficiente que el almacenamiento en búfer del HTML representado desde la vista parcial, ya que se escribirá de todos modos en la secuencia de respuesta. Si prefiere una syntax más consistente, puede usar el método Html.Partial , que hace exactamente lo mismo que el método RenderPartial , pero devuelve un fragmento de HTML y puede usarse como @ Html.Partial (“Producto”, p).

También podemos pasar el modelo usando vistas parciales. @ Html.Partial (“MyView”, “MyModel”);

 @RenderPages() 

Lo anterior no funciona en ASP.NET MVC. Solo funciona en páginas web.

 @Html.Partial("_Footer") 

Deberá usar lo anterior en ASP.NET MVC.