Tengo un sitio MVC3 que usa Razor como motor de visualización. Quiero que mi sitio sea personalizable. La mayoría de las máscaras posibles son lo suficientemente similares como para derivar de un diseño maestro compartido.
Por lo tanto, estoy considerando este diseño:
Sin embargo, me gustaría ser capaz de llamar RenderSection
en la capa inferior, _Common.cshtml
y tienen que rinde una sección que se define en la capa superior, Detail.cshtml
. Esto no funciona: RenderSection
aparentemente solo renderiza las secciones que están definidas en la siguiente capa.
Por supuesto, puedo definir cada sección en cada skin. Por ejemplo, si _Common
necesita llamar RenderSection("hd")
a una sección definida en Detail
, simplemente coloco esto en cada uno _Skin
y funciona:
@section hd {
@RenderSection("hd")
}
Esto da como resultado cierta duplicación de código (ya que ahora cada máscara debe tener la misma sección) y, en general, se siente desordenado. Todavía soy nuevo en Razor y parece que me estoy perdiendo algo obvio.
Al depurar, puedo ver la lista completa de secciones definidas en WebViewPage.SectionWritersStack. Si pudiera decirle a RenderSection que revise toda la lista antes de rendirme, encontraría la sección que necesito. Por desgracia, SectionWritersStack no es público.
Alternativamente, si pudiera acceder a la jerarquía de páginas de diseño e intentar ejecutar RenderSection en cada contexto diferente, podría ubicar la sección que necesito. Probablemente me esté perdiendo algo, pero no veo ninguna forma de hacer esto.
¿Hay alguna forma de lograr este objetivo, además del método que ya describí?