在下面的代码中,数据源对于演示文稿详细信息中的所有渲染都是null,请帮助我在哪里出错
LayoutDefinition layout =
LayoutDefinition.Parse(bioItem[Sitecore.FieldIDs.LayoutField]);
foreach (DeviceDefinition device in layout.Devices) {
if (device.Renderings != null) {
for(var i =0; i < device.Renderings.Count;i++) {
RenderingDefinition rendering = (RenderingDefinition)device.Renderings[i];
var result = rendering.Datasource;
}
}
}
答案 0 :(得分:0)
首先,您应该知道有两个布局字段:
我通常使用此代码段直接从布局中读取:
var devices = dataItem.Database.Resources.Devices;
var defaultDevice = devices.GetAll().First(d => d.Name.ToLower() == ScConstants.DefaultDeviceName);
var renderings = dataItem.Visualization.GetRenderings(defaultDevice, true);
foreach (var rendering in renderings)
{
if (!string.IsNullOrWhiteSpace(rendering?.Settings.DataSource))
{
var datasource = dataItem.Database.GetItem(rendering.Settings.DataSource, dataItem.Language);
.....
还有其他方法可以阅读Layout字段,但我建议您使用提供的API并将布局XML解析作为最后的手段。