如何将 Umbraco 子节点设置为列表<T>
How to set Umbraco Child Node to List<T>
我有一个博客导出包,可以将 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()
其中returns出现以下错误:
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 后台页面的示例:
Image
我在整个 Whosebug 和 google 中搜索了任何涉及将数据从 childNode 调用到列表中的东西,但是这里的列表类型是 INode,当使用这个时:
Comments = node.ChildrenAsList
它returns这个错误:
Cannot implicitly convert type 'System.Collections.Generic.List<umbraco.interfaces.INode>' to 'System.Collections.Generic.List<UmbracoBlogsExportPackage.Models.BlogComment>'
那好吧:-)
首先,.Add() 尝试向集合中添加一些内容,以便
不会在这里工作。
其次,我觉得选择Content as Nodes有点落后,所以我
会尽量不那样做。
第三,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();
}
我有一个博客导出包,可以将 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()
其中returns出现以下错误:
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 后台页面的示例: Image
我在整个 Whosebug 和 google 中搜索了任何涉及将数据从 childNode 调用到列表中的东西,但是这里的列表类型是 INode,当使用这个时:
Comments = node.ChildrenAsList
它returns这个错误:
Cannot implicitly convert type 'System.Collections.Generic.List<umbraco.interfaces.INode>' to 'System.Collections.Generic.List<UmbracoBlogsExportPackage.Models.BlogComment>'
那好吧:-)
首先,.Add() 尝试向集合中添加一些内容,以便 不会在这里工作。
其次,我觉得选择Content as Nodes有点落后,所以我 会尽量不那样做。
第三,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();
}