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