2

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

4

3 回答 3

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])
于 2012-12-07T00:19:39.533 回答
0

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

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

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

于 2012-12-07T00:14:28.817 回答
0

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

于 2012-12-07T12:10:32.273 回答