我正在开展一个应该使用访问者群体来个性化其内容的页面。但是,我似乎无法使访问页面标准匹配。
我假设访问页面标准使用类EPiServer.Personalization.VisitorGroups.Criteria.ViewedPagesCriterion
,它使用键EPiServer:ViewedPages
将查看过的页面存储在HttpContext会话中。不幸的是,当我进入指定的页面时,会话密钥似乎根本没有添加。
有谁知道它为什么不起作用?
编辑:我现在尝试自己实施Criterion,基本上使用来自EPiServer.Personalization.VisitorGroups.Criteria.ViewedPagesCriterion
的反编译代码。事实证明,该标准订阅to a VisitedPage
event,这可能是在访问页面时引发的。通过调试,我确定事件订阅成功,但从不调用事件处理程序。这意味着,由于某种原因,EPiServer不会引发事件。
我尝试订阅StartRequest
event,而在这种情况下,处理程序被调用。这引出了一个问题:为什么访问页面时不会引发VisitedPage
事件?
答案 0 :(得分:1)
仅当通过具有VisitedPage
的控制器显示页面时,才会触发ViewedPageCriterionAttribute
事件。 EPiServer提供的基本控制器EPiServer.Web.Mvc.PageController<T>
具有此属性,因此当控制器从此控制器继承时,它将起作用。
如果您不想使用PageController
,则必须在自定义控制器上使用该属性:
[ViewedPageCriterion]
public class MyController<T> : Controller<T> where T : IDefaultModel
{
// controller implementation
}