以编程方式删除Sitecore中的子布局

时间:2012-03-07 15:57:34

标签: c# .net sitecore sitecore6

有谁知道如何从Sitecore项目中删除效果图?

我想删除所有子布局,以便我可以用新的替换它们。 我有tried this但它似乎不起作用。该项目没有任何变化。

我似乎能够得到这样的效果图:

RenderingReference[] renderings = item.Visualization.GetRenderings(Sitecore.Context.Device, true);

但似乎没有办法设置它们。

我也可以得到这样的效果图(来自上面的链接):

LayoutDefinition layoutDefinition = LayoutDefinition.Parse(LayoutField.GetFieldValue(item.Fields[Sitecore.FieldIDs.LayoutField]));
DeviceDefinition device = layoutDefinition.GetDevice(Sitecore.Context.Device.ID.ToString());

if (device.Layout != null) device.Layout = null;
if (device.Renderings != null) device.Renderings = new ArrayList();

但这又不起作用。从layoutDefinition清除设备并设置修改后的设备导致此异常:No connection could be made because the target machine actively refused it。我现在根本无法查看该项目!

我觉得我正在咆哮错误的树,任何想法?

使用Sitecore 6.4

UPDATE Re:techphoria414

我试过的代码:

layoutDefinition.Devices.Clear();
layoutDefinition.Devices.Add(device);

1 个答案:

答案 0 :(得分:6)

我认为你的例外是无关的。要实际保存更改,您需要编辑项目。请务必始终访问并更新值LayoutField.Value

LayoutField layoutField = new LayoutField(item.Fields[Sitecore.FieldIDs.LayoutField]);
LayoutDefinition layout = LayoutDefinition.Parse(layoutField.Value);
//make your changes to the LayoutDefinition here
item.Editing.BeginEdit();
layoutField.Value = layout.ToXml();
item.Editing.EndEdit();