tutorial que pages net mvc aspx asp asp.net asp.net-mvc asp.net-mvc-4 razor razor-2

asp.net - que - razor vs angular



¿RenderBody() y RenderSection() deben estar en todos los diseños secundarios? (4)

Este código debería funcionar correctamente:

_Layout.cshtml

@RenderSection("something", required: false) @RenderBody()

_Main.cshtml

@{ Layout = "~/Views/Shared/_Layout.cshtml"; } @section something { Hey I''m actually on the _Main layout. }

Index.cshtml

@{ Layout = "~/Views/Shared/_Main.cshtml"; } <div id="Index Content Here"> @RenderBody() </div>

index.cshtml se debe representar según lo siguiente:

<head> Hey I''m actually on the _Main layout. </head> <div id="Index Content Here"> </div> </div>

Tengo tres diseños simples,

_Layout.cshtml (este es el diseño base)

@RenderSection("something", required: false) @RenderBody()

_Main.cshtml

@{ Layout = "~/Views/Shared/_Layout.cshtml"; } @section something { Hey I''m actually on the _Main layout. }

Index.cshtml

@{ Layout = "~/Views/Shared/_Main.cshtml"; }

Cuando trato de representar la vista de índice en una acción, recibí este error,

El método "RenderBody" no se ha llamado para la página de diseño "~ / Views / Shared / _Main.cshtml".

Pero espera, _Main.cshtml tiene un diseño principal que ya tiene un RenderBody() . Entonces, ¿estoy equivocado? ¿Debo llamar a RenderBody() para cada diseño de niño?


Las secciones se pueden hacer opcionales representándolas con required: false

@RenderSection("SectionName", required: false)


Sí, RenderBody debe incluirse en cada página de diseño, independientemente del anidamiento.

@RenderBody funciona como un marcador de posición para que el motor sepa dónde colocar el contenido de la vista utilizando la página de diseño.


Trate de incluir la sección en la última vista.

@{ Layout = "~/Views/Shared/_Main.cshtml"; } @section something { content }

ACTUALIZACIÓN: Muy bien, me atrevo a decir que también necesitas escribir @RenderSection en el diseño principal

@section something { Hey I''m actually on the _Main layout. @RenderSection("something", required:false) } enter code here