2012-03-07 30 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