У мене є сайт MVC3, який використовує Razor як механізм перегляду. Я хочу, щоб мій сайт можна було скинути. Більшість можливих скінів досить подібні, щоб їх можна було отримати із спільного головного макета.
Тому я розглядаю такий дизайн:

Тим НЕ менше, я хотів би мати можливість викликати RenderSectionв нижньому шарі, _Common.cshtmlі мати його винести розділ, визначений у верхньому шарі, Detail.cshtml. Це не працює: RenderSectionочевидно, рендерує лише ті розділи, які визначені наступним шаром вгору.
Звичайно, я можу визначити кожен розділ у кожній обробці. Наприклад, якщо _Commonпотрібно викликати RenderSection("hd")розділ, визначений у Detail, я просто розміщую це в кожному, _Skinі воно працює:
@section hd {
@RenderSection("hd")
}
Це призводить до деякого дублювання коду (оскільки кожна обшивка тепер повинна мати цей самий розділ) і, як правило, відчуває себе безладно. Я все ще новачок у Razor, і, здається, мені може не вистачити чогось очевидного.
Під час налагодження я бачу повний список визначених розділів у WebViewPage.SectionWritersStack. Якби я міг просто сказати RenderSection переглянути весь список, перш ніж відмовлятися, він знайшов би потрібний мені розділ. На жаль, SectionWritersStack є загальнодоступною.
Як варіант, якщо я міг отримати доступ до ієрархії сторінок макета та спробувати виконати RenderSection у кожному різному контексті, я міг би знайти потрібний розділ. Я, мабуть, чогось пропускаю, але я не бачу способу цього зробити.
Чи є якийсь спосіб досягнення цієї мети, крім методу, який я вже окреслив?