Ich habe eine MVC3-Site, die Razor als Ansichtsmodul verwendet. Ich möchte, dass meine Website skinnbar ist. Die meisten möglichen Skins sind so ähnlich, dass sie von einem gemeinsam genutzten Master-Layout abgeleitet werden können.
Daher denke ich über dieses Design nach:

Ich möchte jedoch RenderSectionin der Lage sein, die unterste Ebene aufzurufen _Common.cshtmlund einen Abschnitt rendern zu lassen, der in der obersten Ebene definiert ist Detail.cshtml. Dies funktioniert nicht: RenderSectionAnscheinend werden nur Abschnitte gerendert, die in der nächsten Ebene definiert sind.
Natürlich kann ich jeden Abschnitt in jeder Skin definieren. Wenn zum Beispiel ein in definierter Abschnitt _Commonaufgerufen werden muss , platziere ich diesen einfach in jedem und es funktioniert:RenderSection("hd")Detail_Skin
@section hd {
@RenderSection("hd")
}
Dies führt zu einer gewissen Duplizierung des Codes (da jeder Skin jetzt denselben Abschnitt haben muss) und fühlt sich im Allgemeinen unordentlich an. Ich bin noch neu bei Razor und es scheint, als würde mir etwas Offensichtliches fehlen.
Beim Debuggen wird die vollständige Liste der definierten Abschnitte in WebViewPage.SectionWritersStack angezeigt. Wenn ich RenderSection nur anweisen könnte, die gesamte Liste durchzusehen, bevor ich aufgebe, würde es den Abschnitt finden, den ich brauche. Leider ist SectionWritersStack nicht öffentlich.
Wenn ich alternativ auf die Hierarchie der Layoutseiten zugreifen und versuchen könnte, RenderSection in jedem unterschiedlichen Kontext auszuführen, könnte ich den gewünschten Abschnitt finden. Ich vermisse wahrscheinlich etwas, aber ich sehe keine Möglichkeit, dies zu tun.
Gibt es eine andere Möglichkeit, dieses Ziel zu erreichen, als die bereits beschriebene Methode?