sintaxis net mvc else asp asp.net-mvc razor

asp.net-mvc - net - razor mvc c#



Predeterminar una sección en una vista de Razor (3)

Actualmente estoy usando varios diseños para lograr este mismo escenario exacto.

/Views/Shared/_Layout.cshtml

<html> ... <body> <div id="menu">@RenderSection("Menu", required:false)</div> ... @RenderBody() ... </body> </html>

/Views/Shared/_LayoutWithDefaultMenu.cshtml

@{ Layout = "~/Views/Shared/_Layout.cshtml"; } @section Menu { @Html.Partial("Menu") } @RenderBody()

/Views/_ViewStart.cshtml

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

Lo que esto significa es que, de forma predeterminada, todas mis vistas obtienen el diseño con un menú predeterminado. Sin embargo, en una base de vista por vista, puedo establecer el diseño en _Layout.cshtml y luego implementar el @section Menu yo mismo.

Aquí está la situación que estoy tratando de resolver:

Tengo un diseño principal compartido con una sola sección @RenderSection ("Menú") que quiero usar de manera predeterminada en un menú estándar para la mayoría de mis páginas, pero me gustaría reemplazar / anular esa sección en algunas subpáginas. ¿Es esto posible con Razor en esta etapa del juego?

Esperaba poder definir la implementación predeterminada de esa sección en _ViewStart.cshtml pero parece que no me gusta.

¿Sería mejor una vista parcial del menú para esta situación?

Editar:

Estoy recibiendo el siguiente error con este código ahora: Se han definido las siguientes secciones, pero no se han procesado para la página de diseño "~ / Views / Shared / _Layout.cshtml": "menu".

_Layout.cshtml

<div id="menu"> @if (IsSectionDefined("menu")) { RenderSection("menu"); } else { <text> <ul> <li>@Html.ActionLink("Home", "Index", "Home")</li> <li><a href="#">Lookups</a> <ul> @Html.ActionLink("Product","Index","Product") </ul> </li> </ul> </text> } </div>

Index.cshtml

@section menu { <ul> <li>@Html.ActionLink("Product", "Index", "Product")</li> <li>@Html.ActionLink("Form Type", "Index", "Product")</li> <li>@Html.ActionLink("Supplier", "Index", "Product")</li> </ul> }


Ah ... me estaba metiendo con esto y descubrí que podía hacerlo simplemente cambiando la lógica:

@RenderSection("Header", false) @if (!IsSectionDefined("Header")) { <header> Default Header! </header> }

Entonces, si mis páginas no definen @section Header { ... } , representa el valor predeterminado.