Sitecore Personalize无效

时间:2015-08-05 04:15:05

标签: sitecore sitecore-dms

我为Sitecore的DMS功能创建了一个简单的演示站点。 在sitecore内容中,我创建了这个结构:

主页
| -Personalize
.. | -HomeView1
.. | -HomeView2

HomeView1,HomeView2和Home具有相同的模板,其中只包含一个Field: Display Text

现在我为主页创建Personalize,为它设置规则。 规则是当前月份是8月,并将个性化内容指向HomeView1。 当我预览时,内容不会变为HomeView1的文本。 这是我的源代码:

public partial class HomePage : System.Web.UI.UserControl
{
    protected Item currentItem;
    protected void Page_Load(object sender, EventArgs e)
    {
        currentItem = Sitecore.Context.Item;
    }
}

这就是我在主页上的内容

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="HomePage.ascx.cs" Inherits="DMSDemo.sublayouts.HomePage" %>
<div><%= currentItem["Display Text"].ToString() %></div>

我想知道为什么Sitecore.Context.Item在应用个性化规则时不会返回正确的项目(HomeView2)?

请给我一些建议。提前谢谢。

1 个答案:

答案 0 :(得分:9)

当您进行个性化时,上下文项目不会更改,子布局的数据源会这样做。所以你应该将currentItem设置为数据源。

以下是获取我从Matthew Dresser's blog复制/粘贴的数据源的一些常用代码:

var sublayout = this.Parent as Sitecore.Web.UI.WebControls.Sublayout;
if (sublayout != null)
{
    Guid dataSourceId;
    Sitecore.Data.Items.Item dataSource;
    if (Guid.TryParse(sublayout.DataSource, out dataSourceId))
    {
        dataSource = Sitecore.Context.Database.GetItem(new ID(dataSourceId));
    }
    else
    {
        dataSource = Sitecore.Context.Database.GetItem(sublayout.DataSource);
    }
}

其他一些观点:

  • 一般来说,avoid the use of the context item
  • 是一种很好的做法
  • 您的页面项目(Home)不需要 相同的模板具有数据源项。
  • 我不认为个性化 在预览模式下工作,但您可以在编辑模式下进行检查。