0

我有一个博客导出包,可以将 Umbraco 中的博客内容导出为 XML。

现在我要导出评论数据,评论部分在NewsItem节点上设置为childNode,如何使用这种格式从childNode抓取数据到列表中?

这是我的代码:

public List<BlogPosts> getPostList()
{
    var contentType = ApplicationContext.Current.Services.ContentTypeService
        .GetContentType("umbNewsItem");
    var nodes = ApplicationContext.Current.Services.ContentService
        .GetContentOfContentType(contentType.Id).Select(content => new Node(content.Id));

    return nodes.Select(node => new BlogPosts()
    {
        Title = node.GetProperty("title").ToNullSafeString(),
        BodyText = node.GetProperty("bodyText").ToNullSafeString(),
        PublishDate = node.GetProperty("publishDate").ToNullSafeString(),
        Author = node.GetProperty("author").ToNullSafeString(),
        Image = node.GetProperty("image").ToNullSafeString(),
        //This is where I want to grab the blog comments content
        Comments = node.ChildrenAsList.Add("comments") 
    }).ToList();
}

我第一次尝试这个,我在 .Add("comments") 行上收到一个错误,内容如下:

The best overloaded method match for 'System.Collections.Generic.List<umbraco.interfaces.INode>.Add(umbraco.interfaces.INode)' has some invalid arguments

我尝试的下一件事是:

Comments = node.ChildrenAsList<BlogComment>.Add("comments").ToList()

返回以下错误:

The property 'umbraco.NodeFactory.Node.ChildrenAsList' cannot be used with type arguments

我也试过这个:

Comments = node.ChildrenAsList.Add("comments").ToList()

返回此错误:

The best overloaded method match for 'System.Collections.Generic.List<umbraco.interfaces.INode>.Add(umbraco.interfaces.INode)' has some invalid arguments

这是我的 BlogPosts 模型:

public class BlogPosts
{
    public string Title { get; set; }
    public string BodyText { get; set; }
    public string PublishDate { get; set; }
    public string Author { get; set; }
    public string Image { get; set; }
    public List<BlogComment> Comments { get; set; }
}

public class BlogComment
{
    public string Comment { get; set; }
    public string CommentDate { get; set; }
}

这是 Umbraco 后台页面的示例: 图片

我已经在整个 stackoverflow 和 google 中搜索了任何涉及从 childNode 调用数据到列表中的内容,但这里的列表类型是 INode,当使用这个时:

Comments = node.ChildrenAsList

它返回此错误:

Cannot implicitly convert type 'System.Collections.Generic.List<umbraco.interfaces.INode>' to 'System.Collections.Generic.List<UmbracoBlogsExportPackage.Models.BlogComment>'
4

1 回答 1

3

好吧 :-)

  • 首先, .Add() 尝试向集合中添加一些东西,所以这在这里不起作用。

  • 其次,我认为选择内容作为节点有点倒退,所以我会尽量不这样做。

  • 第三, IEnumerable 有一个我认为可以在这里工作的 Cast() 方法。不过,我无法真正测试它。

同样,这是未经测试的,但也许可以尝试这样的事情?显然我不知道 Comment DocType 别名,所以记得改变那一点:-)

public List<BlogPosts> getPostList()
{
    var contentType = UmbracoContext.Current.Application.Services.ContentTypeService
        .GetContentType("umbNewsItem");
    var contentService = UmbracoContext.Current.Application.Services.ContentService;
    var nodes = contentService.GetContentOfContentType(contentType.Id);

    return nodes.Select(node => new BlogPosts()
    {
        Title = node.GetValue("title").ToNullSafeString(),
        BodyText = node.GetValue("bodyText").ToNullSafeString(),
        PublishDate = node.GetValue("publishDate").ToNullSafeString(),
        Author = node.GetValue("author").ToNullSafeString(),
        Image = node.GetValue("image").ToNullSafeString(),
        //This is where I want to grab the blog comments content
        Comments = contentService.GetChildren(node.Id).Where(x => x.ContentType.Alias == "Comment").Cast<BlogComment>().ToList()
    }).ToList();
}
于 2016-05-13T12:53:23.677 回答