2013-06-27 44 views
6

我想知道是否有任何的方式來靜態調用查看類似渲染,你將如何使用下面的網頁表單代碼調用sublayout:靜態視圖效果圖在Sitecore的6.6

<sc:Sublayout Path="~/sublayouts/samplesublayouts.ascx" DataSource="SomeItemId" runat="server" /> 

我試着做這樣的:

@Html.Sitecore().ViewRendering("~/renderings/samplerendering.cshtml", new { DataSource= "SomeItemId"}) 

但我不能強類型的視圖渲染,除非我也是在Sitecore的創建渲染項和也創造Sitecore的模型項目,因爲我會收到和錯誤。我想知道是否有類似的簡單方式,我可以使用MVC靜態鍵入內部渲染器。

回答

12

下面顯示的方法允許將剃鬚刀視圖靜態綁定到演示文稿項目而不創建渲染項目。

layout.cshtml文件靜態綁定不具有在Sitecore的視圖渲染演示項目,並指定一個DataSource項的Razor視圖:

@Html.Sitecore().ViewRendering("/views/StandaloneRendering.cshtml", new { DataSource = "/sitecore/content/Home/My Datasource Item" }) 

StandaloneRendering.cshtml Razor視圖看起來是這樣的:

@using Sitecore.Mvc.Presentation 
@model RenderingModel 

@functions 
{ 
    public Sitecore.Data.Items.Item Item 
    { 
     get 
     { 
      var item = Sitecore.Context.Item; 

      if (!string.IsNullOrEmpty(Model.Rendering.DataSource)) 
      { 
       item = Sitecore.Context.Database.GetItem(Model.Rendering.DataSource); 
      } 
      return item; 
     } 
    } 
} 

<p>Item Name: @Model.PageItem.Name</p>  
<p>Datasource Path: @Model.Rendering.DataSource</p>  
<p>Datasource Item Name: @Item.Name</p> 
<p>Datasource Item Path: @Item.Paths.FullPath</p> 
<p>Datasource Item Template: @Item.TemplateName</p> 

以下是頁面上的輸出:

Item Name: Home 

Datasource Path: /sitecore/content/Home/My Datasource Item 

Datasource Item Name: My Datasource Item 

Datasource Item Path: /sitecore/content/Home/My Datasource Item 

Datasource Item Template: Sample Item 

幾件事情要注意這樣做時:

  1. 由Razor視圖所呈現出來的Sitecore的字段是不是在頁面編輯器中修改。
  2. 我非常懷疑StandaloneRendering.cshtml輸出會將其放入Sitecore HTML緩存中。
  3. @functions塊中的Item屬性應該移動到某個位置,以便它可以在多個剃鬚刀視圖中重複使用。
  4. 這是一個非標準的方法。這可能會讓一些想要在Sitecore中找到關聯呈現項目的人混淆。
+1

爲什麼獨立渲染工作,作爲與相應項目的渲染沒有?另外,即使在頁面編輯器中無法編輯,是否也無法爲使用的渲染提供關聯的Sitecore項目? –

+2

我相信,如果剃刀文件也被設置爲Sitecore中的視圖渲染,也就是說,它有一個視圖渲染項,它的路徑指向它。從你原來的文章中,我認爲你是在一個輕量級的方式來靜態調用剃鬚刀視圖,也可以接收數據源參數。你能澄清你正在尋求做什麼,以及你看到了什麼錯誤,謝謝 –

+0

這基本上會做我在找的東西,雖然我一直在尋找一個內置的方法來做到這一點,該項目可以自動處理通過實施IRenderingModel的模型。我們最終使用了glassmapper模型,並使用內置模型自動構建模型,更改了模型生成管道。這些視圖對於無論如何都是視圖渲染並不特別,所以我們能夠使用PartialView來實現我們的目標。這樣我們就可以傳遞模型本身,PartialView可以像正常的MVC一樣渲染。 – IAreATomKs