Sitecore:如何从sublayout codebehind获取sublayout项目?

Sitecore:如何从sublayout codebehind获取sublayout项目?,sitecore,sitecore6,Sitecore,Sitecore6,我试图在codebehind中获取子布局项(或项id)这可能吗? 更新: 我不是指数据源项或当前项,而是指子布局渲染定义项。这与子布局文件有一对一的关系。 代码隐藏文件: 公共部分类产品\u子布局:System.Web.UI.UserControl { 受保护的无效页面加载(对象发送方、事件参数e) { Sublayout Sublayout=此父项作为Sublayout; Item subLayoutItem=null;//如何在此处获取sublayout呈现定义项? } } 要获取用于将特定

我试图在codebehind中获取子布局项(或项id)这可能吗?

更新: 我不是指数据源项或当前项,而是指子布局渲染定义项。这与子布局文件有一对一的关系。

代码隐藏文件:

公共部分类产品\u子布局:System.Web.UI.UserControl
{
受保护的无效页面加载(对象发送方、事件参数e)
{
Sublayout Sublayout=此父项作为Sublayout;
Item subLayoutItem=null;//如何在此处获取sublayout呈现定义项?
}
}

要获取用于将特定控件放置到页面的项,可以使用名为Sublayout Parameter Helper的共享源模块。 可以找到该模块

如果您想检索您可以使用以下设置考虑的项:

道具:

public部分类Afbeeldingen:System.Web.UI.UserControl
{
/// 
///当前呈现的数据源项
/// 
private Sitecore.Data.Items.Item dataSource=null;
/// 
///用于获取渲染参数、数据源和渲染的Helper对象
/// 
private SublayoutParamHelper paramHelper=null;
/// 
///获取数据源项。
/// 
///数据源项。
公共Sitecore.Data.Items.Item数据源项目
{
得到
{
if(this.dataSource==null)
{
if(this.paramHelper.DataSourceItem!=null)
{
this.dataSource=this.paramHelper.DataSourceItem;
}
其他的
{
this.dataSource=Sitecore.Context.Item;
}
}
返回此.dataSource;
}
}
/// 
///设置数据源。
/// 
///数据源。
公共字符串数据源
{
设置
{
this.dataSource=Sitecore.Context.Database.Items[value];
}
}
页面加载:

//
///处理页面控件的加载事件。
/// 
///事件的来源。
///
受保护的无效页面加载(对象发送方、事件参数e)
{
if(this.Parent是Sitecore.Web.UI.WebControls.Sublayout)
{
this.paramHelper=新的SublayoutParamHelper(this,true);
}
if(this.paramHelper!=null)
{
correctItem=paramHelper.DataSourceItem;
}
从那里,您将子项加载到您的项目中。
希望这有帮助。希望我能充分理解您的问题。

要获取用于将特定控件放置到页面的项,可以使用名为Sublayout Parameter Helper的共享源模块。 可以找到该模块

如果您想检索您可以使用以下设置考虑的项:

道具:

public部分类Afbeeldingen:System.Web.UI.UserControl
{
/// 
///当前呈现的数据源项
/// 
private Sitecore.Data.Items.Item dataSource=null;
/// 
///用于获取渲染参数、数据源和渲染的Helper对象
/// 
private SublayoutParamHelper paramHelper=null;
/// 
///获取数据源项。
/// 
///数据源项。
公共Sitecore.Data.Items.Item数据源项目
{
得到
{
if(this.dataSource==null)
{
if(this.paramHelper.DataSourceItem!=null)
{
this.dataSource=this.paramHelper.DataSourceItem;
}
其他的
{
this.dataSource=Sitecore.Context.Item;
}
}
返回此.dataSource;
}
}
/// 
///设置数据源。
/// 
///数据源。
公共字符串数据源
{
设置
{
this.dataSource=Sitecore.Context.Database.Items[value];
}
}
页面加载:

//
///处理页面控件的加载事件。
/// 
///事件的来源。
///
受保护的无效页面加载(对象发送方、事件参数e)
{
if(this.Parent是Sitecore.Web.UI.WebControls.Sublayout)
{
this.paramHelper=新的SublayoutParamHelper(this,true);
}
if(this.paramHelper!=null)
{
correctItem=paramHelper.DataSourceItem;
}
从那里,您将子项加载到您的项目中。 希望这有帮助。希望我能充分理解您的问题。

将解释详细信息,但以下是您需要的代码:

Sitecore.Context.Database.GetItem(((Sublayout)Parent).DataSource);
更新:

您可能可以通过使用数据库按ID获取渲染项本身:

Sitecore.Context.Database.GetItem(((Sublayout)Parent).RenderingID);
将解释详细信息,但以下是您需要的代码:

Sitecore.Context.Database.GetItem(((Sublayout)Parent).DataSource);
更新:

您可能可以通过使用数据库按ID获取渲染项本身:

Sitecore.Context.Database.GetItem(((Sublayout)Parent).RenderingID);

不需要通过控件循环或通过控件名称检查子布局

执行此任务的正确方法是遵循以下步骤:

  • 获取当前项的布局定义
  • 使用LayoutDefinition,获取感兴趣的子布局的渲染定义
  • 根据完整列表获取子布局的索引
  • 使用索引检索子布局的渲染参考
  • 使用RenderingReference获取对.NET控件的引用
  • 以下是实现目标的代码:

    LayoutDefinition layoutDef=LayoutDefinition.Parse(Sitecore.Context.Item.Fields[“\uu渲染”].Value);
    字符串deviceId=Sitecore.Context.Device.ID.ToString();
    DeviceDefinition curDeviceDef=layoutDef.GetDevice(deviceId);
    RenderingDefinition renderingDef=curDeviceDef.GetRendering(Sitecore.Context.Database.Items[“/Sitecore/Layout/SubLayouts/MySublayout”].ID.ToString());
    int controlIndex=curDeviceDef.GetIndex(renderingDef.UniqueId