net mvc layouts cshtml asp _appstart asp.net asp.net-mvc asp.net-mvc-3 razor

asp.net - mvc - @RenderSection en plantillas de maquinilla de afeitar anidadas



mvc use layout (1)

Debe especificar las secciones que pueden pasar en la plantilla del medio.

BaseTemplate.cshtml

<!DOCTYPE html> <html> <head> <title>@ViewBag.Title</title> @RenderSection("HeaderContent", false) @* The region of the header scripts (custom css) *@ </head> <body> @RenderBody() </body> </html>

EDITAR

su nueva plantilla hija

@{ Layout = "~/Views/Shared/BaseTemplate.cshtml"; } @section HeaderContent { @RenderSection("HeaderContent", false) } @RenderBody()

Si coloca la sección de renderizado dentro de una sección de la plantilla base, representará esa sección en el lugar correcto en la plantilla base.

View.cshtml -> usa MiddleLayout.cshtml como su diseño

@section HeaderContent { <!-- header content that will now render --> } <!-- page content -->

Mi problema es que parece que no puedo usar @RenderSection de una plantilla anidada cuando @RenderSection está definido en la plantilla base. Actualmente, tengo una plantilla base anidada que está vinculada a una plantilla secundaria que luego se usa en las páginas de vista. Cuando defino el @RenderSection en la plantilla base y lo @RenderSection en las páginas de vista arroja un error.

Aquí está el problema exacto.

Quiero crear una RenderSection que me permita insertar scripts personalizados. Mi plantilla base ...

<!DOCTYPE html> <html> <head> <title>@ViewBag.Title</title> @RenderSection("HeaderContent", false) // The region of the header scripts (custom css) </head> <body> @RenderBody() </body> </html>

Luego omito la plantilla secundaria ya que no quiero poner ningún código de cabeza personalizado allí y aplicarlo a la página en sí.

@section HeaderContent { <script>alert("hi");</script> }

Mi problema es que parece que no puedo agregar un código de cabeza personalizado en la plantilla base de mis páginas normales.

Las siguientes secciones se han definido pero no se han procesado para la página de diseño ~/Views/Shared/OneColLayer.cshtml": "HeaderContent .

¿Debo incluir un puntero a la plantilla base en la página de visualización?

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

Mi nueva plantilla base

<head> <link rel="stylesheet" type="text/css" href="@Url.Content("~/content/layout.css")" /> <link rel="stylesheet" type="text/css" href="@Url.Content("~/content/global.css")" /> <script type="text/javascript" src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")"></script> <script type="text/javascript" src="@Url.Content("~/js/fadeInFadeOut.js")"></script> <title>@ViewBag.Title</title> @RenderSection("HeaderContent", false) </head> <body> @RenderBody() </body>

mi nueva plantilla hija

@{ Layout = "~/Views/Shared/BaseTemplate.cshtml"; } @RenderSection("HeaderContent", false) @RenderBody()

mi vista

@{ ViewBag.Title = "Home"; Layout = "~/Views/Shared/OneColLayer.cshtml"; } @section HeaderContent { <h1>Left Content</h1> } <div>my view content</div>

el contenido se coloca en la plantilla oneCol ahora la plantilla base.

resultados ...

<div id="Content"> <h1>Left Content</h1> </div>