gpt4 book ai didi

asp.net-mvc-3 - 具有级联部分的 Razor 嵌套布局

转载 作者:行者123 更新时间:2023-12-03 05:17:23 25 4
gpt4 key购买 nike

我有一个使用 Razor 作为其 View 引擎的 MVC3 站点。我希望我的网站可以换肤。大多数可能的皮肤都非常相似,可以从共享的主布局中派生出来。

因此,我正在考虑这样的设计:

Planned view diagram

但是,我希望能够在底层 _Common.cshtml 中调用 RenderSection,并让它渲染在顶层定义的部分,Detail.cshtml。这不起作用:RenderSection 显然只渲染下一层定义的部分。

当然,我可以定义每个皮肤中的每个部分。例如,如果 _Common 需要为 Detail 中定义的部分调用 RenderSection("hd"),我只需将其放置在每个 中>_Skin 它的工作原理:

@section hd {
@RenderSection("hd")
}

这会导致一些代码重复(因为每个皮肤现在都必须具有相同的部分)并且通常感觉很困惑。我对 Razor 还很陌生,似乎我可能遗漏了一些明显的东西。

调试时,我可以在 WebViewPage.SectionWritersStack 中看到已定义节的完整列表。如果我可以告诉 RenderSection 在放弃之前查看整个列表,它就会找到我需要的部分。唉,SectionWritersStack 是非公开的。

或者,如果我可以访问布局页面的层次结构并尝试在每个不同的上下文中执行 RenderSection,我就可以找到我需要的部分。我可能错过了一些东西,但我看不到任何方法可以做到这一点。

除了我已经概述的方法之外,还有其他方法可以实现此目标吗?

最佳答案

事实上,目前使用公共(public) API 是不可能实现这一点的(除了使用节重定义方法之外)。您可能会幸运地使用私有(private)反射,但这当然是一种脆弱的方法。我们将研究在 Razor 的下一版本中使这种情况变得更容易。

与此同时,以下是我就该主题撰写的几篇博客文章:

关于asp.net-mvc-3 - 具有级联部分的 Razor 嵌套布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5525602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com