当前页面是特定节点ID的后代吗?

时间:2012-12-06 23:12:24

标签: razor umbraco

如何使用Umbraco中的剃刀模板检查当前页面是否是特定节点的后代?我将使用案例陈述。

3 个答案:

答案 0 :(得分:3)

不确定这些方法是否仍适用于最新版本的Umbraco,但使用4.7.1和DynamicNode时,可以使用这些方法:

@Model.AncestorOrSelf(string nodeTypeAlias)
@Model.AncestorOrSelf(int level)
@Model.AncestorOrSelf(Func<DynamicNode, bool> func)

和那些助手功能:

@Model.IsDescendant(DynamicNode[,valueIfTrue][,valueIfFalse])
@Model.IsDescendantOrSelf(DynamicNode[,valueIfTrue][,valueIfFalse])

答案 1 :(得分:0)

如果您使用http://ucomponents.codeplex.com/中的uComponents / uQuery,您可以执行以下操作:

var isChildOf = uQuery.GetCurrentNode().GetAncestorNodes().Where(n => n.NodeTypeAlias == "MyHomePage").First() != null;

(注意:我没有尝试过这段代码,但在制作中有类似的内容)

答案 2 :(得分:0)

快速而肮脏的方法是检查节点Path属性(我认为@ Model.Path应该得到它)。这应该包含逗号分隔的字符串或从节点返回到站点根目录的路径的数字数组(不确定哪个在我的头顶)。您可以在该属性中检查您的父节点。这将使用LINQ或uQuery节省更昂贵的节点查找。