2016-10-13 8 views
3

レンダリングのすべてのインスタンスを削除する必要があります。私は以下のコードを試しましたが、動作しません。Sitecoreからレンダリングを削除する項目

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

は、以下のコードを試してみてください。私はそれをテストしていませんが、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

エラーが発生しました "行番号6で暗黙的に 'System.Collections.Generic.IEnumerable 'を 'int'に変換できません。 – Shailesh

+0

'IEnumerable 'を' var'を使用する代わりに明示的に指定します。今すぐやってみて下さい。 –

+0

申し訳ありませんが、同じエラー – Shailesh

関連する問題