Sitecore Personalize无效

Tru*_*uan 3 sitecore sitecore-dms

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

首页
| -
个性化
.. | -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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我在主页上的内容

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

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

请给我一些建议.提前致谢.

Mar*_*ies 9

个性化时,上下文项目的数据源不会更改.所以你应该设置currentItem为数据源.

这里有一些常见的代码来获取我从Matthew Dresser的博客中复制/粘贴的数据源:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

其他一些观点:

  • 通常,避免使用上下文项是一种好习惯
  • 您的页面项(Home)不需要与数据源项相同的模板.
  • 我不认为个性化在预览模式下有效,但您可以在编辑模式下进行检查.