特定のプレースホルダー内に存在するレンダリングのコンテンツ (HTML など) を出力するメソッドを作成しようとしています。目標は、Sitecore.Data.Items.Item
興味のあるプレースホルダー キーを渡すことであり、メソッドはレンダリングされたコンテンツを返す必要があります。
これに関する問題は、ページ コンテキストが確立されていないため、サブレイアウトのメソッドでRenderControl()
null 参照エラーをスローしているようです。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();
}