Я пытаюсь написать метод, который выводит содержимое (т.е. HTML) для любых визуализаций, которые существуют в конкретном заполнителе. Цель состоит в том, чтобы передать в Sitecore.Data.Items.Item
и ключ-заполнитель, который мне интересен, и метод должен вернуть отображаемый контент.
Проблема заключается в том, что не существует контекста страницы, и поэтому вызов RenderControl()
вызывает ошибку нулевой ссылки в методе GetCacheKey()
для Sublayout.
Кто-нибудь знает о способе визуализации рендеринга Sublayout или 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();
}