在 Umbraco 7.8.1 中按名称获取子节点

Get child node by name in Umbraco 7.8.1

我的内容结构是:

-Home (the site root node)
  -About Us
  -Our Sevice1
  -Our Sevice2
  -Our Sevice3

我为我们的服务创建了一个宏。 在宏观上,我想要我们的服务 1、我们的服务 2、我们的服务 3…… 但是在列表变量 About Us 中也来了,但我不想要它 我只想要我们子节点的服务名

  var list= CurrentPage.Children();

关于我们也出现在列表中,但我不想要它。

您在集合中看到 About Us 页面的原因是因为您使用了 Children 方法。

使用 Children 方法,您要求父节点向下遍历一级的直接子节点。因此,在这种情况下,您要求主页的所有直接子级,以便按预期工作。

您要实现的是所有 Service 个节点的集合。要做到这一点,您可以这样做。

确保您的服务节点具有单独的文档类型(例如文档类型 Service Page)。

然后您可以进行以下操作:

var servicePages = CurrentPage.ServicePages;

您可以在此处查看相关文档:

https://our.umbraco.org/documentation/reference/querying/dynamicpublishedcontent/collections

但是所有这些都是使用动态语法,这将在未来版本的 Umbraco 中删除。所以我建议你去使用强类型语法。

然后可以通过以下方式更改:

var servicePages = Model.Content.Children.Where(x => x.DocmentTypeAlias == "servicePage");

这样做是获取您所在当前页面的 IPublishedContent 对象,即 主页 然后获取所有具有文档类型的子项servicePage.

类型的别名

像@Mivaweb 提到的那样,最好不要使用动态(我认为除了将来被删除之外,为了性能)。

但是,我认为您不必创建单独的文档类型,尽管那样也行得通。 Where 方法的谓词应该处理其他表达式,例如:

var servicePages = Model.Content.Children.Where(x => x.Name.StartsWith("Our Sevice"));