【问题标题】:Sitecore View Rendering and Controller Rendering HelperSitecore 视图渲染和控制器渲染助手
【发布时间】:2016-05-03 05:28:45
【问题描述】:

我有一个使用此方法的站点核心应用程序:

@Html.Sitecore().ViewRendering("Path to the View")
@Html.Sitecore().Controller("Controller Name", "Controller Action")

即使我没有在 Sitecore CMS 中为该渲染创建项目,这也能正常工作

那么该方法与简单的 ASP MVC 方法有什么区别:

@Html.Partial("Path to the View")
@Html.Action("Controller Name", "Controller Action")

两者都一样还是不一样?我在这里感到有点困惑

【问题讨论】:

    标签: asp.net-mvc sitecore sitecore8


    【解决方案1】:
    @Html.Sitecore().ViewRendering("Path to the View") 
    

    将触发 mvc.renderRendering 管道。如果您将视图添加到占位符,您的视图将以几乎相同的方式呈现。与 Html.Partial 的区别在于处理视图的周期。如果您依赖该管道中的某些内容(例如@Gatogordo 提到的缓存),渲染结果可能会有所不同。 (或者如果您自己在那里添加了一些处理器)。 如果您希望通过占位符添加它们时呈现相同,请使用 Html.Sitecore().ViewRendering

    对于

    @Html.Sitecore().Controller("Controller Name", "Controller Action")
    

    @Html.Action("Controller Name", "Controller Action")
    

    不同之处还在于它的执行生命周期。 Sitecore 通过 ControllerRunner 执行,从 SitecoreControllerFactory 获取 Controller 并执行一些操作。 ASP.Net MVC 操作是通过 HttpContext.Server.Execute 执行的,实际上也是如此。但是在查看实现时,我可以假设差异之一是路由。在使用 ASP.Net MVC 助手的情况下,您的路由值可以将您带到一些 Sitecore 项目,而不是如果它匹配则需要控制器操作。 Sitecore 助手将始终执行控制器。

    如果您需要更多详细信息,可以在反射器中打开 System.Web.Mvc.Html.ChildActionExtensions.Action 和 Sitecore.Mvc.Helpers.SitecoreHelper.Controller 并逐步进行比较。

    【讨论】:

      【解决方案2】:

      两者相似但不完全相同。 Sitecore helper 中的那些将为常见的 mvc 增加一点 Sitecore 风格(例如添加缓存可能性),但也会对性能产生(小)影响。

      这是一个需要做出的选择,这取决于你的渲染和上下文..

      【讨论】: