2016-05-03 167 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風格(例如添加緩存可能性),但也會有(小)性能影響。

這是一個需要做出選擇,這取決於你的繪製和上下文..