呈现子布局数据源的标准方法 - 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;
 }

我建议你的子布局从子布局基础继承。

您的子布局库将如下所示:

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;
  }
 }

最新更新