我有一个相当简单的Sitecore MVC渲染,其中包含一个标题字段和一个占位符:
<section>
<div class="container">
<h2 class="m-header"><span>@Html.Sitecore().Field("PromoItemsHeader")</span></h2>
<div class="l-section grid">
@Html.Sitecore().Placeholder("PromoItems")
</div>
</div>
</section>
如果占位符包含项目,我希望此呈现仅在页面编辑模式 之外显示。这似乎应该很简单,但我找不到明显/干净的方法。
答案 0 :(得分:8)
试试这个:
Sitecore.Context.Page.Renderings
.Count(r => r.Placeholder.IndexOf("PromoItems", StringComparison.OrdinalIgnoreCase) > -1)
如果您只想使用数据源进行渲染,可以添加:
Sitecore.Context.Page.Renderings
.Where(r => r.Placeholder.IndexOf("PromoItems", StringComparison.OrdinalIgnoreCase) > -1)
.Count(r => !string.IsNullOrWhiteSpace(r.Settings.DataSource))
我现在只需在视图模型中添加一个新属性,如果占位符包含任何渲染,则返回该属性。
答案 1 :(得分:2)
Sitecore.Context.Page.Renderings
是我在以前的Sitecore 7.x webforms项目中使用的,但它似乎在Sitecore 8.x MVC + Glass版本中对我无效 - 渲染我的布局视图中的集合总是空的。不确定这是不是8件事,玻璃事件还是&#34;我以某种方式搞砸了我的项目&#34;的事情。
工作是什么:
var pageContext = Sitecore.Mvc.Presentation.PageContext.Current;
var pageDefinition = pageContext.PageDefinition;
bool showSidebar = pageDefinition.Renderings.Any(x => x.Placeholder == "left");