是否有什么原因或什么原因让我错过了塞特罗尔返回true的Item.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));//True
//真
编辑:任何可能无意中找到这个答案的人,在下面的几个例子中,我需要在新闻类别的多选择字段中找到最高级别的元素。
newsCategories
.Where(x => newsCategories
.Any(y => x != y && !x.Axes.IsDescendantOf(y)))和
newsCategories
.Where(x => newsCategories
.Any(y => x != y && !x.Axes.IsDescendantOf(y)))发布于 2012-05-08 20:24:02
我不得不相信,而不是中的方法应该被命名为IsAncestorOf和IsDescendantOf。根据您的发现,并快速查看Sitecore代码,这些方法实际上应该被命名为IsAncestorOrSelf和IsDescendantOrSelf。
对于这个例子,
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.ID与y的父级的ID进行比较,这就是为什么应该将其命名为IsAncestorOrSelf。
IsDescendantOf方法比较x的LongID路径是否从y的LongID路径开始。由于字符串总是以相同的字符串开头,我们再次看到这个方法应该被命名为IsDescendantOrSelf。
FYI,一个LongID路径看起来像这个/{11111111-1111-1111-1111-111111111111}/{0DE95AE4-41AB-4D01-9EB0-67441B7C2450}/{110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9},我怀疑它是用来代替/sitecore/content/home的,目的是为了避开这样一个事实,即sitecore允许兄弟姐妹使用相同的名字。
发布于 2012-05-08 19:00:00
你在塞特罗尔的逻辑中碰到了一个“故障安全”。这是因为你在自我检查同一个项目。您需要使用两个不同的项来执行此操作才能产生任何结果。
https://stackoverflow.com/questions/10504570
复制相似问题