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

Der*_*ker 10 c# sitecore sitecore6

我正在尝试编写一个方法,为任何碰巧存在于特定占位符中的渲染输出内容(即HTML).目标是传入Sitecore.Data.Items.Item我感兴趣的a 和占位符键,该方法应返回呈现的内容.

这个问题似乎是没有建立页面上下文,因此调用在Sublayout RenderControl()GetCacheKey()方法中抛出一个空引用错误.

有人知道以编程方式呈现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();
}
Run Code Online (Sandbox Code Playgroud)

Zac*_*bel 0

在我看来,以编程方式呈现子布局的最佳方法是使用转发器,并将标签<sc:Sublayout>放入<ItemTemplate>.

从那里您只需执行以下一项或两项操作:

  1. DataSource的 属性设置<sc:Sublayout>为所需项目 GUID 的字符串表示形式(即子布局的数据源,如果有的话)

  2. Path将的 属性设置<sc:Sublayout>为您要渲染的子布局的路径。

服务器/sitecore 将处理其余的事情。

  • 这是在代码中静态插入子布局。Derek 需要以编程方式在 C# 中呈现控件,并在 C# 中获得该控件的响应输出字符串。他没有页面上下文,因为他在服务中。 (2认同)