2016-05-13 2 views
0

У меня есть пакет экспорта блога, который экспортирует содержимое блога в Umbraco в XML.Как установить дочерний узел Umbraco в список <T>

Теперь я хочу экспортировать данные комментариев, раздел комментариев задан как childNode на узле NewsItem, как я могу использовать этот формат для захвата данных из 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 ("Комментарии") линии, которая гласит:

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 

Это моя · блоги, · Модель:

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 backoffice страница: Image

Я искал во всем 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>' 
+0

Чувак. Вам нужно описать, что вы пробовали. Вам нужно показать, что вы изучили немного, прежде чем спрашивать о переполнении стека. Вам нужно описать, что не работает. В противном случае мы не сможем (или не будем) вам помочь. Я смотрю на этот вопрос и думаю: «с чем он сталкивается?«потому что вы не включаете ЛЮБЮЮ информацию об ошибке ИЛИ любую информацию о том, что вы уже пробовали ... Вот помощь, чтобы задать хороший вопрос: http://stackoverflow.com/help/how-to-ask –

+0

Переполнение стека НЕ должен быть «Я хочу это, пожалуйста, сделай это для меня». ВАМ нужно (хотеть) сделать это и УЧИТЬСЯ от него. Тогда, когда вы действительно застряли И вы все исследовали И вы, я попробовал все, что вы можете придумать, вы можете поставить все это в свой вопрос - и получите лучшую помощь. –

+0

Я даже пробовал: 'Комментарии = node.ChildrenAsList.Find (System.Predicate .Find (System.Predicate < umbraco.interfaces.INode>) 'имеет некоторые недопустимые аргументы –

ответ

1

Ладно :-)

  • Прежде всего, .Add() пытается добавить SOMET hing к коллекции, так что здесь не работает.

  • Во-вторых, я думаю, что выбор содержимого как узлов немного назад, так что я постараюсь не делать этого.

  • В-третьих, 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(); 
} 
+0

Спасибо, к сожалению 'Комментарии = contentService.GetChildren (node.Id) .Where (x => x.ContentType.Alias ​​==" Комментарий "). () .ToList() ' не компилируется, я получаю ошибку, которая выглядит так: ' Ссылка на объект требуется для нестатического поля, метода или свойства 'Umbraco.Core.Services.ContentService .GetChildren (int) '' Спасибо за ваш вклад, действительно помог мне больше понять, что я делаю. Псевдоним типа документа - «комментарии» –

+0

Он компилирует для меня штраф для меня? Вы случайно смешиваете статические и нестатические методы/классы? –

+0

Хотите, чтобы я отправил вам ссылку pastebin, чтобы показать вам весь класс? У меня нет каких-либо статических методов в моем классе, хотя вот пастебин: [Pastebin Link] (http://pastebin.com/dTpPwn2J) –