【问题标题】:Standard way to render datasource of a sublayout - Sitecore渲染子布局数据源的标准方法 - Sitecore
【发布时间】:2016-03-18 13:14:07
【问题描述】:

这对我有用,但想知道这是正确的方法还是有更好的方法来显示设置为子布局的数据源的项目。

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

【问题讨论】:

    标签: sitecore sitecore8


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多