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)
在我看来,以编程方式呈现子布局的最佳方法是使用转发器,并将标签<sc:Sublayout>放入<ItemTemplate>.
从那里您只需执行以下一项或两项操作:
将DataSource的 属性设置<sc:Sublayout>为所需项目 GUID 的字符串表示形式(即子布局的数据源,如果有的话)
Path将的 属性设置<sc:Sublayout>为您要渲染的子布局的路径。
服务器/sitecore 将处理其余的事情。
| 归档时间: |
|
| 查看次数: |
4976 次 |
| 最近记录: |