2016-10-13 8 views
3

Мне нужно удалить весь экземпляр рендеринга с помощью идентификатора рендеринга. Я пробовал код ниже, но не работал.Удалить визуализацию с Sitecore Item

LayoutField layoutField = new LayoutField(item.Fields[Sitecore.FieldIDs.LayoutField]); 
LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value); 
DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(Sitecore.Context.Device.ID.ToString()); 

//Create a RenderingDefinition and add the reference of sublayout or rendering 
RenderingDefinition renderingDefinition = new RenderingDefinition(); 
renderingDefinition.ItemID = sublayoutId; 

var d = layoutDefinition.GetDevice(deviceDefinition.ID.ToString()); 
d.Renderings.Remove(renderingDefinition); 

item.Editing.BeginEdit(); 
layoutField.Value = layoutDefinition.ToXml(); 
item.Editing.EndEdit(); 

я говорил:

+0

В какой момент вы удаляете рендеринг? Это одно исполнение? –

ответ

3

код Try ниже. Я не тестировал его, но вместо создания объекта RenderingDefinition и его удаления из списка (который не будет работать, потому что это не тот же экземпляр объекта), он фильтрует существующий массив рендеринга, сравнивающий ItemId:

LayoutField layoutField = new LayoutField(item.Fields[Sitecore.FieldIDs.LayoutField]); 
LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value); 
DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(Sitecore.Context.Device.ID.ToString()); 

var d = layoutDefinition.GetDevice(deviceDefinition.ID.ToString()); 

IEnumerable<RenderingDefinition> renderingsArray = d.Renderings.ToArray().Cast<RenderingDefinition>(); 
d.Renderings = new ArrayList(renderingsArray.Where(r => r.ItemID != sublayoutId).ToList()); 

item.Editing.BeginEdit(); 
layoutField.Value = layoutDefinition.ToXml(); 
item.Editing.EndEdit(); 
+0

Получение ошибки «Невозможно неявно преобразовать тип» System.Collections.Generic.IEnumerable 'to' int '"в строке # 6 – Shailesh

+0

Я обновил ответ, чтобы использовать' IEnumerable 'явно, вместо использования' var'. Попробуй. –

+0

Извините Но такая же ошибка – Shailesh