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

Razor 当前页面是特定节点id的后代吗?,razor,umbraco,Razor,Umbraco,如何在Umbraco中使用razor模板进行检查,以确定当前页面是否是特定节点的后代?我将使用case语句。如果您使用的是来自的uComponents/uQuery,您可以执行以下操作: var isChildOf = uQuery.GetCurrentNode().GetAncestorNodes().Where(n => n.NodeTypeAlias == "MyHomePage").First() != null; (注意:我没有尝试过此代码,但在生产中也有类似的代码)不确定这些

如何在Umbraco中使用razor模板进行检查,以确定当前页面是否是特定节点的后代?我将使用case语句。

如果您使用的是来自的uComponents/uQuery,您可以执行以下操作:

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

(注意:我没有尝试过此代码,但在生产中也有类似的代码)

不确定这些方法是否仍然适用于最新版本的Umbraco,但在4.7.1和
DynamicNode中,通常会有以下方法:

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

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

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