我正在尝试编写一种方法,该方法将为碰巧存在于特定占位符中的任何渲染输出内容(即 HTML)。目标是传递一个Sitecore.Data.Items.Item
和我感兴趣的占位符键,并且该方法应该返回呈现的内容。
这个问题似乎是没有建立页面上下文,因此调用会在 SublayoutRenderControl()
的方法中引发空引用错误。GetCacheKey()
有人知道以编程方式呈现子布局或 XSLT 呈现的方法吗?
这是我到目前为止所得到的:
private string GetPlaceholderContent(Item item, string placeHolder)
{
StringWriter sw = new StringWriter();
using (HtmlTextWriter writer = new HtmlTextWriter(sw))
{
foreach (RenderingReference renderingReference in item.Visualization.GetRenderings(Sitecore.Context.Device, false))
{
if (renderingReference.Placeholder == placeHolder)
{
// This ensures we're only dealing with Sublayouts
if (renderingReference.RenderingItem.InnerItem.IsOfType(Sitecore.TemplateIDs.Sublayout))
{
var control = renderingReference.GetControl();
control.RenderControl(writer); // Throws null reference error in GetCacheKey()
}
}
}
}
return sw.ToString();
}