【问题标题】:How to get a child of child ? Umbraco CMS如何得到一个孩子的孩子? Umbraco CMS
【发布时间】:2016-07-19 20:47:21
【问题描述】:

我正在尝试获取位于页面下文件夹中的所有子页面的集合。但是,我正在为此苦苦挣扎,CurrentPage.Children 返回文件夹元素(如预期的那样)。

我正在尝试获取所有包(无论是国内还是国际都无所谓,只是让内容编辑器更好地输入内容)并在包页面上显示来自完整包文档类型的几个字段。

我可以实现这一目标的最佳和简洁的方法是什么?

谢谢, 维沙尔

【问题讨论】:

  • 你应该试试CurrentPage.Children.SelectMany(c => c.Children)
  • 抛出一个错误说“不能直接调用 lambda 表达式”。你能发布一个你推荐如何使用它的例子吗?我试过“var selection = CurrentPage.Children.SelectMany(c => c.Children);”但它似乎不起作用
  • 如果将 CurrentPage 替换为 Model.Content 会怎样?
  • 那时不喜欢儿童,如果我要在另一个页面上重用此代码,我认为 Model.Content 不会是动态的。

标签: asp.net-mvc-4 razor treeview umbraco


【解决方案1】:

一种方法是获取所有后代并在页面级别上进行过滤。

@{
    foreach (var childchild in CurrentPage.Descendants().Where("Level == " + (CurrentPage.Level+2)))
    {
     <h2>@childchild.Level @childchild.Name</h2>
    }
 }

还可以对文档类型进行过滤,以确保您只获得所需的类型。 (包裹文件类型) 添加类似这样的内容。 .Where("DocumentTypeAlias == \"Package\"")

综合:

.Where("DocumentTypeAlias == \"Package\" && Level == " + (CurrentPage.Level+2))

【讨论】:

  • 感谢您的回答。它按预期工作。还有一件事。正如您仅针对特定文档类型所提到的那样,我想让它的类型更强。如何将附加条件添加到 where 子句?我试过 .Where ("Level == "+ (CurrentPage.Level+2) +"&& DocumentTypeAlias == \"Package\"") 只是想知道这是否正确?排序后,我会将您的答案标记为正确。非常感谢
  • With 2 Where's like this: CurrentPage.Descendants().Where("DocumentTypeAlias == \"Pagina\"").Where("Level == " + (CurrentPage.Level+2))
  • 这也应该工作 CurrentPage.Descendants().Where("DocumentTypeAlias == \"Package\" && Level == " + (CurrentPage.Level+2)))
【解决方案2】:

我有办法解决,但不是最好的,所以仍在寻找好的答案。我使用了以下内容:

foreach (var item in CurrentPage.Children)
{
    foreach (var package in item.Children())
    {
        <h2>@package.PackageName</h2>

    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2013-12-01
    • 2013-03-07
    相关资源
    最近更新 更多