本文介绍了Sitecore LinkManager.GetItemUrl()解析为别名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的国家网站中为一个本地网站的主页(以及它的子页)创建了别名-但我不知道这是如何发生的。

当有人登陆本地页面时,我有一个控件(cs文件),它在本地网页的左侧创建本地链接(到子页面)。这些链接派生自Sitecore上下文(当前项目的内容路径)。

在为本地站点中的所有页面创建别名之后,我注意到了这个问题。如果URL是Sitecore别名,则为子别名构建导航链接-否则,它们将由Sitecore LinkManager解析,就像创建别名之前一样。但是,当我点击原始本地项目(而不是别名)的页面时,将为别名呈现链接:

Child Link.NavigateUrl=LinkManager.GetItemUrl(子级);

并且我已经验证子项目是否有效。对于为什么LinkManager会呈现别名的链接,以及如何避免这种情况,有人有什么建议吗?

推荐答案

Sitecore.Links.LinkManager.GetItemUrl(item)返回原始项目的路径,而不是别名路径。如果您具有标识别名的特殊逻辑(例如,通过使用Sitecore.Context.RawUrl属性),则可能会遇到输出缓存问题,这可能会导致在导航到原始项时显示控件的别名版本。

更新:我非常确定您遇到了输出缓存问题。通过创建一个显示时间戳和RawUrl的测试控件,并在表示详细信息中打开该控件的输出缓存,我能够重现此行为。

第一次显示控件时,无论是针对项还是针对别名,都会缓存输出,并且每次查看控件时(针对原始项或针对别名)都会显示此缓存输出。即使您打开了"随数据变化",效果也是一样的,因为"随数据变化"是由数据源项驱动的,而不是由URL驱动的。

若要修复此行为,您需要将缓存状态添加到GetCachingId属性的输出中:

protected override string GetCachingID()
{
    return this.GetType().Name + (IsAlias() ? "Alias": "Item");
}

private bool IsAlias()
{
    return Sitecore.Context.Database.Aliases.Exists(Sitecore.Context.RawUrl);
}

IsAlias逻辑的this answer属性。

这篇关于Sitecore LinkManager.GetItemUrl()解析为别名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-23 20:12