c# - 如何以编程方式获取渲染内容?

标签 c# sitecore sitecore6

我正在尝试编写一种方法来输出恰好存在于特定占位符中的任何渲染的内容(即 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 - 呈现任何项目/占位符片段!

是的,它将您提供的项目剪切为占位符/渲染:

enter image description here

下一步是生成标记(针对所有可能的数据源):

enter image description here

该内容发布到 CDN,浏览器选择加载哪个版本 = 个性化工作!

换句话说,您提出的问题变成了一种尖端产品,可以做得更多!

您可以对 Uniform 程序集进行逆向工程,看看它们实际上是如何做到的;)

关于c# - 如何以编程方式获取渲染内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15259830/

相关文章:

C#.NET 3.5 : How to invoke an event handler and wait for it to complete

sitecore - 如何从媒体 url 检索 Sitecore 媒体项目?

sitecore - 如何以编程方式批准 Sitecore 中的内容项

url-rewriting - Sitecore - 将 url 中的 ""重写为 "-"但仍允许破折号作为合法的项目名称

c# - 如何使用 Inner Join 进行更新

c# - 如何在分布式系统中生成重复概率低的标识符?

c# - 在 WPF 装饰器中绘制虚线

visual-studio-2012 - 无法识别的标记前缀或设备筛选器 'sc'(在 VS2012 中)

caching - 如何为 Sitecore ControllerRendering 启用缓存

sitecore - 在 ECM 中检索自定义 MTA 的 DNS 消息