使用浏览页面标准的访问者组不起作用

Visitor groups using Viewed Pages criterion not working

我正在开发一个页面,该页面应使用访问者组来个性化其内容。但是,我似乎无法获得匹配的已访问页面标准。

我假设已访问页面标准使用 class EPiServer.Personalization.VisitorGroups.Criteria.ViewedPagesCriterion,它使用键 EPiServer:ViewedPages 将已查看页面存储在 HttpContext 会话中。不幸的是,当我进入指定页面时,似乎根本没有添加会话密钥。

有没有人知道为什么它不起作用?


编辑: 我现在尝试自己实现该标准,基本上使用 EPiServer.Personalization.VisitorGroups.Criteria.ViewedPagesCriterion 中的反编译代码。事实证明,标准订阅 to a VisitedPage event 应该在访问页面时引发。通过调试,我确定事件订阅成功,但事件处理程序从未被调用。这意味着,出于某种原因,EPiServer 没有引发事件。

我尝试改为订阅 StartRequest event,在这种情况下调用了处理程序 。这就引出了一个问题:为什么在访问页面时没有引发 VisitedPage 事件?

仅当通过具有 ViewedPageCriterionAttribute 的控制器显示页面时才会触发 VisitedPage 事件。 EPiServer 提供的base controller EPiServer.Web.Mvc.PageController<T> 有这个属性,所以controller 继承这个controller 就可以了。

如果您不想使用 PageController,则必须在您的自定义控制器上使用该属性:

[ViewedPageCriterion]
public class MyController<T> : Controller<T> where T : IDefaultModel
{
    // controller implementation
}