UserControl中的ItemId

时间:2012-10-08 13:48:39

标签: sitecore

我想重述一下情况: 我有两个数据模板,一个用于带有标签的产品,第二个用于带有/不带标签的文章,分别使用产品和文章数据模板。考虑选项卡功能数据模板将采取全局行动,可以随时插入任何数据模板。

现在的情况是这样我将Tab功能与Product相关联但不与Article相关联,因此结果应该是在Product Page I上应该查看选项卡功能,而在Article选项卡上不应该是可见的。

问题仍然存在:我如何检查我插入Tab功能的页面?另外如何找到我目前在的当前上下文页面的ItemID?

3 个答案:

答案 0 :(得分:2)

尝试使用以下代码。它将为您提供上下文中使用的当前Sitecore项目。

Sitecore.Context.Item

答案 1 :(得分:1)

如果您已经为内容项分配了不同的数据模板,那么您可以使用以下代码检查项目所基于的数据模板:(这样做可能比检查ItemId更好)< / p>

        Sitecore.Data.Items.Item current = Sitecore.Context.Item;
        if (current.TemplateName.Equals("products", StringComparison.OrdinalIgnoreCase) == 0)
        {
            // your logic for products items
        }
        else
        {
            // your logic for services items
        }

但是,如果你只想要ItemId,你可以使用这样的代码:

        Sitecore.Data.Items.Item current = Sitecore.Context.Item;
        Sitecore.Data.ID myID = current.ID;

希望有所帮助。

答案 2 :(得分:1)

有几种情况发生在我身上,不确定哪一种是你的:

<强> 1。当前项目是唯一项目

如果您正在执行类似于显示产品或服务项目详细信息的详细信息页面,则Sitecore.Context.Item调用将为您提供上下文中的当前项目,在大多数情况下基于URL中的当前项目路径(有更改上下文的方法,但现在让我们忽略这些边缘情况)。然后,您可以像对待任何其他时间一样绑定字段或提取值。

<强> 2。绑定到项目列表

如果你正在做一些事情,那就是&#34;事情&#34; (即.NET转发器绑定到可能是产品或服务的项目列表)并希望使用用户控件显示每个转发器。一些选择:

  1. 向您的控件添加属性(类似于&#34; DataSource&#34;)并在子布局中的转发器数据绑定期间设置用户控件数据源属性(或在转发器标记中执行此操作)
  2. 在子布局中的转发器数据绑定期间从项目中提取所需的属性,并将其传递给用户控件上的不同属性。
  3. 第3。由Datasource驱动

    如果您正在运行配置为具有数据源的子布局,则您无法使用上下文项,因为它将引用绑定到&#34;页面的项目&#34;正在显示,而不是您正在处理的特定组件。在这种情况下,您需要以下代码从当前子布局中提取数据源:

    var dataSourceId = ((Sitecore.Web.UI.WebControl)Parent).DataSource;
    

    (注意:您可能希望对上面的代码进行一些错误处理以防止出现空引用错误)