2016-03-18 28 views
0

這適用於我,但希望知道這是正確的方法或有更好的方法來顯示設置爲子數據源的數據源的項目。呈現子佈局的數據源的標準方式 - Sitecore

sample.ascx

<sc:Text ID="txtHeader" runat="server" Field="Header" /> 
<br/> 
<sc:Image ID="imgMotif" runat="server" Field="Motif Left" /> 
<br/> 
<!-- some more controls --> 

sample.ascx.cs

private void BindData() 
{ 
    Item introItem = GetItemFromDatasource((Sublayout)this.Parent); 

    if(introItem != null) 
    { 
    txtHeader.Item = introItem; 
    imgMotif.Item = introItem; 
    //..and so on.. 
    } 
} 

private Item GetItemFromDatasource(Sublayout sublayout) 
{ 
    Item dataSource = null; 

    if (sublayout != null) 
    { 
    Guid dataSourceId; 

    if (Guid.TryParse(sublayout.DataSource, out dataSourceId)) 
     dataSource = Sitecore.Context.Database.GetItem(new ID(dataSourceId));     
    } 
    return dataSource; 
} 

回答

1

我建議你sublayouts從sublayout基地繼承。

你SublayoutBase看起來像:

public class SublayoutBase : UserControl 
{ 
private Item _dataSource; 

public Item DataSource 
{ 
    get 
    { 
    if (_dataSource == null) 
    { 
    if (Parent is Sublayout) 
    { 
     var sublayout = (Sitecore.Web.UI.WebControls.Sublayout)Parent; 
     Guid dataSourceId; 
     if (Guid.TryParse(sublayout.DataSource, out dataSourceId)) 
     { 
     _dataSource = Sitecore.Context.Database.GetItem(new ID(dataSourceId)); 
     } 
     else 
     { 
     _dataSource = Sitecore.Context.Database.GetItem(sublayout.DataSource); 
     } 
    } 
    if (_dataSource == null) 
    { 
     _dataSource = Sitecore.Context.Item; 
    } 
    } 
    return _dataSource; 
    } 
}