@DSergeev

Почему не выводятся вложенные категории (построение дерева ul li)?

Создаю хелпер для построения дерева ul li и что то не так с рекурсивной функцией, выводятся только категории верхнего уровня. Что не так? может вообще можно как то проще это сделать?
Данные в базе хранятся так:
Id ParentId Name
1 null 1.0
2 1 1.1
3 1 1.2
4 null 2.0

Сам хелпер
namespace MyProject.Helpers
{
    public static class TreeView
    {
        private static IEnumerable<Category> category;

        public static MvcHtmlString DisplayTree(this HtmlHelper html, IEnumerable<Category> collection)
        {
            category = collection;

            return NewMethod(null);
        }

        private static MvcHtmlString NewMethod(int? parentId)
        {
            TagBuilder ul = new TagBuilder("ul");

            if (category.Any(x => x.ParentCategoryId == parentId))
            {
                foreach (var item in category.Where(x => x.ParentCategoryId == parentId))
                {
                    TagBuilder li = new TagBuilder("li");
                    li.SetInnerText(item.Name);
                    ul.InnerHtml += li.ToString();

                    NewMethod(item.Id);
                }
            }
            return new MvcHtmlString(ul.ToString());
        }
    }
}
  • Вопрос задан
  • 2340 просмотров
Решения вопроса 1
@DSergeev Автор вопроса
Задачу решил.

Рабочий код
public static class TreeView
    {
        private static IEnumerable<Category> category;

        public static MvcHtmlString DisplayTree(this HtmlHelper html, IEnumerable<Category> collection)
        {
            category = collection;

            return new MvcHtmlString(NewMethod(null));
        }

        private static string NewMethod(int? parentId)
        {
            TagBuilder ul = new TagBuilder("ul");

            if (category.Any(x => x.ParentCategoryId == parentId))
            {
                foreach (var item in category.Where(x => x.ParentCategoryId == parentId))
                {
                    TagBuilder li = new TagBuilder("li");
                    li.SetInnerText(item.Name);

                    ul.InnerHtml += li.ToString();

                    ul.InnerHtml += NewMethod(item.Id);
                }
                return ul.ToString();
            }

            return "";
        }
    }


p.s чет на этом тостере одни просмотры, а ответов 0. Даже блин посоветоваться не с кем, все молчат!
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы