我正在尝试编写一种方法来输出恰好存在于特定占位符中的任何渲染的内容(即 HTML)。目标是传入一个 Sitecore.Data.Items.Item
和我感兴趣的占位符键,该方法应该返回呈现的内容。
这个问题似乎是没有建立页面上下文,因此调用 RenderControl()
会在 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();
}
最佳答案
从最初提出这个问题到现在快8年了,现在变成了Uniform - 呈现任何项目/占位符片段!
是的,它将您提供的项目剪切为占位符/渲染:
下一步是生成标记(针对所有可能的数据源):
该内容发布到 CDN,浏览器选择加载哪个版本 = 个性化工作!
换句话说,您提出的问题变成了一种尖端产品,可以做得更多!
您可以对 Uniform 程序集进行逆向工程,看看它们实际上是如何做到的;)
关于c# - 如何以编程方式获取渲染内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15259830/