如何获得渲染程序的内容?(How to get content of rendering progr

2019-08-17 08:54发布

我试图写将输出所发生的任何渲染的内容(即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();
}

Answer 1:

在我看来,以编程方式呈现Sublayout最好的方法是使用一个中继器,并把<sc:Sublayout>标签在<ItemTemplate>

从那里,你只需要做一个或两个以下:

  1. 所设定的DataSource的属性的<sc:Sublayout>为所需项的GUID的字符串表示(即,用于sublayout数据源,如果有的话)

  2. 设置Path的财产<sc:Sublayout>是路径,您希望呈现的Sublayout。

服务器/ Sitecore的将处理其余部分。



文章来源: How to get content of rendering programmatically?