下面顯示的方法允許將剃鬚刀視圖靜態綁定到演示文稿項目而不創建渲染項目。
在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
幾件事情要注意這樣做時:
- 由Razor視圖所呈現出來的Sitecore的字段是不是在頁面編輯器中修改。
- 我非常懷疑
StandaloneRendering.cshtml
輸出會將其放入Sitecore HTML緩存中。
@functions
塊中的Item
屬性應該移動到某個位置,以便它可以在多個剃鬚刀視圖中重複使用。
- 這是一個非標準的方法。這可能會讓一些想要在Sitecore中找到關聯呈現項目的人混淆。
爲什麼獨立渲染工作,作爲與相應項目的渲染沒有?另外,即使在頁面編輯器中無法編輯,是否也無法爲使用的渲染提供關聯的Sitecore項目? –
我相信,如果剃刀文件也被設置爲Sitecore中的視圖渲染,也就是說,它有一個視圖渲染項,它的路徑指向它。從你原來的文章中,我認爲你是在一個輕量級的方式來靜態調用剃鬚刀視圖,也可以接收數據源參數。你能澄清你正在尋求做什麼,以及你看到了什麼錯誤,謝謝 –
這基本上會做我在找的東西,雖然我一直在尋找一個內置的方法來做到這一點,該項目可以自動處理通過實施IRenderingModel的模型。我們最終使用了glassmapper模型,並使用內置模型自動構建模型,更改了模型生成管道。這些視圖對於無論如何都是視圖渲染並不特別,所以我們能夠使用PartialView來實現我們的目標。這樣我們就可以傳遞模型本身,PartialView可以像正常的MVC一樣渲染。 – IAreATomKs