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