我一直在剖析Orchard CMS渲染和视图引擎,以便了解它是如何组合在一起的。我发现RenderBody和RenderSection都没有被调用过。据我所知,Razor视图引擎需要调用其中一个。
什么是绕过必须调用RenderBody或RenderSection或Razor抛出异常的要求?
是否有自定义视图引擎(ThemeAwareViewEngine)?如果是这样,它如何处理解析Razor语法以生成内容?
谢谢。
答案 0 :(得分:2)
实际上是另一种方式。 Razor
本身并不要求RenderBody
被称为具有此要求的RazorViewEngine
。肯定会有另一个使用Razor的视图引擎,它具有完全不同的工作方式。看看https://github.com/Antaris/RazorEngine或https://github.com/Buildstarted/RazorSharp我还写了一个降价视图引擎,它使用剃刀进行一些简单的布局。
从阅读源代码看起来好像他们已经创建了一些自定义视图引擎。他们的RazorViewEngine
用自己的自定义WebViewPage
替换了剃刀生成的文件的基类,该自定义Display
的方法Zone
是LayoutAwareViewEngine
的别名。这是允许他们渲染子视图的原因,好像DocumentZone
中有几种类型的区域,例如ContentZone
,{{1}}等等。
所以最后他们做了很多自定义代码。