Sitecore视图渲染和控制器渲染助手

时间:2016-05-03 05:28:46

标签: asp.net-mvc sitecore sitecore8

我有一个使用此方法的sitecore应用程序:

@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")

两者相同与否?我觉得这里有点困惑

2 个答案:

答案 0 :(得分:10)

@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并逐步进行比较。

答案 1 :(得分:1)

两者相似但不完全相同。来自Sitecore助手的那些将为常见的mvc添加一些Sitecore风格(例如添加缓存可能性),但也会有(小)性能命中。

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