0

我正在寻找一种方法来查找包含某些标签的所有页面。对于文件,我可以这样做:

// convert list of tags to list of Guids
var tagGuids = GetGuidsForTags(tags);
// find all items with one of these tags
return App.WorkWith().Documents()
    .Where(ni => ni.GetValue<IList<Guid>>("Tags").Any(tag => tagGuids.Contains(tag)) &&
        ni.Status == ContentLifecycleStatus.Live
    )
    .Get().DistinctBy(x => x.Id).ToList();

但是,当App.WorkWith().Pages()我改为使用时,我收到一条错误消息,指出 PageNode 没有名为“Tags”的自定义字段。

Telerik.Sitefinity.Model.dll 中出现“System.Exception”类型的异常,但未在用户代码中处理

附加信息:类型“Telerik.Sitefinity.Pages.Model.PageNode”的错误自定义字段“标签”

有谁知道如何获取包含某些标签的页面列表?我正在使用 Sitefinity 8.1。

为了澄清我没有在我的页面中添加自定义标签字段。当我这样做时,我会两次获得该领域: 标签字段显示两次

所以 Sitefinity 似乎默认有一个 Tags 字段......

4

2 回答 2

1

我将假设您添加了一个名为“标签”的自定义页面字段。

自定义页面字段 如果您有该字段,则此代码将为您提供页面。

    var pages = App.WorkWith().Pages()
                .LocatedIn(PageLocation.Frontend)
                .ThatArePublished()
                .Where(p => p.GetValue<TrackedList<Guid>>("Tags").Any(tag => tagGuids.Contains(tag)))
                .Get().ToList(); //ToList to commit to memory for iteration if needed
于 2015-08-20T18:16:10.890 回答
0

显然我的 Sitefinity 配置错误。一旦我删除了自制的自定义字段标签,它也删除了原来的标签。所以现在我只剩下一个,现在是一个自定义字段。完成此操作后,我可以使用原始问题中的代码访问标签...

希望我能解释一下,因为我花了很长时间才弄清楚这一点。

于 2015-08-24T10:16:38.623 回答