ビューエンジンとしてRazorを使用しているMVC3サイトがあります。自分のサイトをスキニングできるようにしたい。可能なスキンのほとんどは、共有マスターレイアウトから派生できるほど十分に類似しています。
したがって、私はこの設計を検討しています。
RenderSection
ただし、最下層のを呼び出して、最上層_Common.cshtml
で定義されたセクションをレンダリングできるようにしたいと思いますDetail.cshtml
。これは機能しません。RenderSection
明らかに、次のレイヤーで定義されているセクションのみをレンダリングします。
もちろん、各スキンの各セクションを定義できます。たとえば、で定義されたセクション_Common
を呼び出す必要がある場合は、これをそれぞれに配置するだけで機能します。RenderSection("hd")
Detail
_Skin
@section hd {
@RenderSection("hd")
}
これにより、コードが重複し(各スキンに同じセクションが必要になるため)、一般的に乱雑に感じます。私はまだRazorを初めて使用しているので、明らかな何かが欠けているようです。
デバッグ時に、WebViewPage.SectionWritersStackで定義されたセクションの完全なリストを確認できます。諦める前にリスト全体を調べるようにRenderSectionに指示できれば、必要なセクションが見つかります。残念ながら、SectionWritersStackは非公開です。
または、レイアウトページの階層にアクセスして、それぞれの異なるコンテキストでRenderSectionの実行を試みることができれば、必要なセクションを見つけることができます。私はおそらく何かが足りないのですが、これを行う方法がわかりません。
すでに概説した方法以外に、この目標を達成する方法はありますか?