从Sitecore项目中删除渲染

Sha*_*esh 4 rendering sitecore removeall

我必须通过渲染id删除所有渲染实例.我试过下面的代码,但它没有用.

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();
Run Code Online (Sandbox Code Playgroud)

我提到过:

Mar*_*lak 5

请尝试以下代码.我没有测试它,但是没有创建一个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();
Run Code Online (Sandbox Code Playgroud)