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