Umbraco预约儿童页面的儿童

时间:2014-07-11 09:13:28

标签: c# loops foreach umbraco children

我的内容结构主页内的新闻页面中有新闻帖子

实施例

主页
- 新闻
- 新闻帖子

我希望在foreach声明中在我的主页上提供一些新闻。在我的脑海中,它应该如下:

@foreach (var homenews in CurrentPage.Children.Children)
{
     if (homenews.Name == "News Post")
     {
         //Do some stuff//
     }
}

显然这不起作用所以有人有任何想法吗?感谢

4 个答案:

答案 0 :(得分:4)

当你走在树上时,你必须记住像ChildrenDescendants()这样的属性(或方法)将返回一个对象集合,所以你不能只调用{{1一个集合。您只能在单个对象上调用Children

您可以使用Children之类的内容找到主页的正确子项,然后提取该页面的子项。

答案 1 :(得分:3)

我最终得到了它的id的新闻页面,然后从那里得到它的孩子。以下代码对我有用。谢谢你们。

@{
    var node = Umbraco.Content(1094);    
    <p>@node.Id</p> // output is 1094  
    foreach (var item in node.Children.Where("Visible").Take(3))

    {

         <p>@item.exampleText</p>

    }
    }

答案 2 :(得分:1)

您需要通过 NodeTypeAlias 引用所需节点的文档类型。

因此,假设您的新闻帖的DocType的别名是“NewsPosts”,那么......

@foreach (var homenews in @Model.Descendants().Where("NodeTypeAlias == \"NewsPosts\"")).Take(3)
{       
    <p>@homenews.Name<p>
}   

...应该返回前3个新闻帖的名称。

答案 3 :(得分:0)

我有确切的情况,这就是我的工作方式。 NodeByID非常有用nad -1表示根

@foreach(var item in Model.NodeById(-1).Children)
    {
string itemName = item.Name;
switch(itemName)
{
    case "News":
        @* News *@
    <div id="News"> 
      <h3><a href="@item.Url">@item.Name</a></h3>
   @foreach (var newsPost in item.Children.OrderBy("UpdateDate desc").Take(4).Items)
        {
            <p>
            <a href="@newsPost.Url">@newsPost.Title</a>
             </p>
        }

    </div>
   }
}