下面显示的方法允许将剃须刀视图静态绑定到演示文稿项目而不创建渲染项目。
在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