【问题标题】:Is the current page a descendant of a specific node id?当前页面是特定节点 ID 的后代吗?
【发布时间】:2012-12-06 23:12:23
【问题描述】:

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

【问题讨论】:

    标签: razor umbraco


    【解决方案1】:

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

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

    还有那些 Helper 函数:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-02
          • 1970-01-01
          相关资源
          最近更新 更多