【发布时间】:2011-07-28 09:22:58
【问题描述】:
我有一个使用 Razor 作为其视图引擎的 MVC3 站点。我希望我的网站可以换肤。大多数可能的皮肤都非常相似,可以从共享的主布局中派生出来。
因此,我正在考虑这样的设计:
但是,我希望能够在底层 _Common.cshtml 中调用 RenderSection,并让它渲染在顶层 Detail.cshtml 中定义的部分。这不起作用:RenderSection 显然只渲染定义在下一层之上的部分。
当然,我可以在每个皮肤中定义每个部分。例如,如果_Common 需要为Detail 中定义的部分调用RenderSection("hd"),我只需将其放在每个_Skin 中即可:
@section hd {
@RenderSection("hd")
}
这会导致一些代码重复(因为现在每个皮肤都必须有相同的部分)并且通常感觉很混乱。我还是 Razor 的新手,似乎我可能遗漏了一些明显的东西。
调试时,我可以在 WebViewPage.SectionWritersStack 中看到已定义部分的完整列表。如果我可以告诉 RenderSection 在放弃之前查看整个列表,它会找到我需要的部分。唉,SectionWritersStack 是非公开的。
或者,如果我可以访问布局页面的层次结构并尝试在每个不同的上下文中执行 RenderSection,我可以找到我需要的部分。我可能遗漏了一些东西,但我没有看到任何方法可以做到这一点。
除了我已经概述的方法之外,还有其他方法可以实现这个目标吗?
【问题讨论】:
标签: asp.net-mvc-3 razor viewengine