2016-05-03 263 views
6

我有使用这种方法的Sitecore的应用: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") 

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

回答

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的那些通过ControllerRunnerSitecoreControllerFactory得到控制器并执行一些操作执行。 ASP.Net MVC动作是通过执行的HttpContext.Server.Execute并且做的实际上是一样的。但从实施的角度来看,我可以假设其中一个差异就是路由。如果使用ASP.Net MVC帮助器,您的路由值可以将您带到某个Sitecore项目,而不需要控制器操作(如果它匹配)。 Sitecore助手将始终执行控制器。

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

+0

谢谢,很好的解释 – gill23

1

两者相似但不完全一样。来自Sitecore帮手的人会给普通的mvc添加一点Sitecore风格(例如添加缓存可能性),但也会有(小)性能影响。

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