【问题标题】:Find node id by name in Umbraco Razor在 Umbraco Razor 中按名称查找节点 ID
【发布时间】:2016-04-18 12:58:58
【问题描述】:

我有一个结构类似于Home -> News -> Year -> Month -> Day -> Article 的站点,需要查询以查找Day 文件夹的ID,其中文件夹的名称与指定的YearMonthDay 匹配。

例如,对于 2003 年 5 月 12 日,它将是这样的:

@something().where("Year.name = 2003").where("Month.name = May").where("Day.name = 12")

【问题讨论】:

    标签: razor umbraco7


    【解决方案1】:

    根据您的偏好,您可以使用动态DynamicPublishedContent 或强类型IPublishedContent API 构造查询。

    查询会根据使用的位置而有所不同,因此假设您要运行此查询并在“新闻”页面中显示结果,您需要以下内容:

    var year = CurrentPage.Years.Where("Name == @1", "2013").First();
    var month = year.Months.Where("Name == @1", "May").First();
    var day = month.Days.Where("Name == @1", "12").First();
    var dayId = day.Id;
    

    或者,您可以尝试强类型版本:

    var day = Model.Content
                   .Descendants("Year").First(y => y.Name == "2013")
                   .Descendants("Month").First(m => m.Name == "May")
                   .Descendants("Day").First(d => d.Name == "12").Id;
    

    为了简洁起见,我使用了First(),但实际上您可能想在获取其后代之前检查该页面是否存在。此外,您可能想查看documentation 并提出更适合您的场景的查询。

    【讨论】:

    • 谢谢 - 请您指导我在哪里可以找到有关在查询之前检查页面是否存在的文档。我发现的所有方法都依赖于事先知道节点 ID。
    • 您可以将查询末尾的First() 语句替换为FirstOrDefault() 并检查结果是否为空。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多