按日期排序子节点 - Razor Umbraco

时间:2016-01-26 14:30:53

标签: c# list razor sql-order-by umbraco

对于以下示例,我使用的内容树如下所示: Content tree

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@{
    var home = Model.Content.Descendants().Where(x => x.DocumentTypeAlias == "BlogContainer");

    <div class="container">
        <ul>
            @foreach (var item in home)
            {
                foreach (var items in item.Children)
                {
                    foreach (var baby in items.Children.OrderBy("date desc"))
                    {
                        var date = baby.GetPropertyValue<DateTime>("date");

                        <li>@items.Name - @baby.Name - @date</li>
                    }
                }
            }
        </ul>
    </div>
}

结果是Result three我需要收集所有项目并按日期设置顺序

2 个答案:

答案 0 :(得分:3)

尝试并执行类似

的操作
var allItems = homePage.Descendants("YourItemNodeType")
            .Where(item => item.HasValue("date")
                              && item.GetPropertyValue<DateTime>
                                  ("date") != DateTime.MinValue)
            .ToList()
            .OrderByDescending(item => item.GetPropertyValue<DateTime>("date"));

这应该可以获得第1类和第2类中的所有项目,我总是倾向于检查我的日期是否实际设置(你不需要为@bowserm提到的创建日期这样做,因为它始终存在于值)。

一旦你把它们带到List然后你就可以按照它们的设定日期对它们进行排序,当我在不同的父页面中列出新闻文章时,我会这样做,然后你可以只用一个循环来完成所有这些。

答案 1 :(得分:0)

首先,您使用的是Umbraco版本?看起来你正在使用6+?是对的吗?我的答案应该适用于6和7。

您要查找的属性名为createDate,因此您可以使用baby.GetPropertyValue<DateTime>("createDate")之类的内容。更好的是,您应该只需键入baby.CreateDate即可。 Umbraco已将您在IPublishedContent上可能需要的所有默认属性公开为属性,因此您无需使用GetPropretyValue(...)即可获得这些属性。

看看这个Umbraco v6 MVC Razor Cheatsheet。它列出了您可以从Umbraco中的节点获取的默认属性。 v6的剃刀语法也适用于v7,因此这个备忘单适用于两者。