2012-03-07 84 views
2

有谁知道如何从Sitecore项目中删除渲染?以编程方式删除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回复:techphoria414

代码我想:

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

你能提供你正在使用的代码来保存更改回现场,以及异常的完整堆栈跟踪吗? – techphoria414 2012-03-07 16:22:31

+0

更新了我的问题。 – Jon 2012-03-07 16:34:29

回答

6

我觉得你的例外是不相关的。要实际保存更改,您需要编辑该项目。确保你总是访问并更新throgh的值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(); 
+0

虽然他不想删除子布局,但不添加布局? – 2012-03-07 17:00:03

+0

仍然适用,您可以对LayoutDefinition进行任何更改,其中包括有关每个设备的布局和渲染的信息。 – techphoria414 2012-03-07 17:09:39

+0

啊,我没有意识到'LayoutDefinition'包含了关于渲染的细节。这是非常好的知道! – 2012-03-07 18:41:36