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