虽然我大致同意 Kevin Obee 的说法,但我认为值得提醒自己的是,控制器在 Sitecore 中被用于两个不同的角色:
- 页面级控制器(由项目路由调用)
- 组件级控制器(由重新渲染机制调用)
何时使用:自定义控制器/默认 Sitecore 控制器
页面级控制器
Index
默认情况下,任何与项目路径匹配的路由都将使用Sitecore.Mvc.Controllers.SitecoreController
. 此操作将根据项目的布局配置返回一个 ViewResult。
如果您需要更改此行为(例如影响整个页面的某些内容),您可以指定自定义控制器和项目上的操作(或项目的标准值)。对于自定义控制器,您可以滚动自己的控制器或子类化默认控制器。
组件级控制器
对于ViewRendering
Sitecore 而言,无需特定控制器即可呈现 Razor 视图(我猜是页面级控制器正在发挥作用 - 但想象一下 Sitecore 提供了一个默认控制器,该控制器使用 mvc.getModel 管道获取模型并将其提供给剃刀视图)。
为ControllerRendering
您提供一个可以执行逻辑的自定义控制器(请参阅 Kevin 的回答)并为视图提供模型。子类化没有任何好处Sitecore.Mvc.Controllers.SitecoreController
。
何时调用控制器
页面级控制器
页面级控制器上的操作由路由引擎调用。
组件级控制器
在页面视图呈现时调用 ControllerRendering 上的操作。
使用的好处:自定义控制器/默认 Sitecore 控制器
与默认 Sitecore 控制器相比,自定义控制器的好处是您可以控制逻辑。使用默认 Sitecore 控制器的好处是 Sitecore 为您提供逻辑。
我们是否应该在视图中包含所有业务逻辑
不。(见凯文的回答)