4

是否有我遗漏的原因或某些东西使 SitecoretrueItem.Axes.IsDescendantOf()和都返回Item.Axes.IsAncestorOf()

var test =
Sitecore.Context.Database.GetItem("{862B466A-079B-40E7-8661-FC064EC28574}");  
Response.Write(test.Axes.IsAncestorOf(test));  
Response.Write(test.Axes.IsDes(test));

//真
//真

编辑:任何可能偶然发现此答案的人寻找非包容性IsAncestorOfIsDescendantOf,下面是几个示例,我需要在新闻类别的多选字段中找到最高级别的元素。

newsCategories
   .Where(x => newsCategories
                       .Any(y => x != y && !x.Axes.IsDescendantOf(y)))

newsCategories
   .Where(x => newsCategories
                       .Any(y => x != y && !x.Axes.IsDescendantOf(y)))
4

2 回答 2

10

我不得不相信 Sitecore 中的方法应该命名IsAncestorOfIsDescendantOf. 根据您的发现并快速查看 Sitecore 代码,这些方法实际上应该命名IsAncestorOrSelfIsDescendantOrSelf.

对于这个例子,

Sitecore.Data.Items.Item x = //some item;
Sitecore.Data.Items.Item y = //some item;
x.Axes.IsAncestorOf(y)
x.Axes.IsDescendantOf(y)

IsAncestorOf方法是比较x.ID == y.ID。然后它将继续与x.IDyID的父母进行比较,这就是为什么它应该被命名为IsAncestorOrSelf

IsDescendantOf方法是比较 的路径是否与的LongID路径x开始。由于字符串总是以相同的字符串开头,我们再次看到该方法应该命名为.LongIDyIsDescendantOrSelf

仅供参考,LongID路径看起来像这样/{11111111-1111-1111-1111-111111111111}/{0DE95AE4-41AB-4D01-9EB0-67441B7C2450}/{110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9},我怀疑它被使用,而不是/sitecore/content/home为了绕过 sitecore 允许兄弟姐妹具有相同名称的事实。

于 2012-05-08T20:24:02.047 回答
2

您在 Sitecore 逻辑中遇到了“故障保险”。这是因为您正在对照它自己检查相同的项目。您需要使用 2 个不同的项目执行此操作才能产生任何结果。

于 2012-05-08T19:00:00.123 回答