Помощник ShowTree Отображение дочерних элементов 2 раза - PullRequest
0 голосов
/ 15 мая 2018

Я использую @Helper ShowTree в своем проекте, но у меня проблема с дочерними элементами.На мой взгляд, дочерние элементы отображаются 2 раза и выглядят как родительское меню.Я посмотрел образцы в сайте, но не нашел разницы.Где моя ошибка?

MyEntity

public class Kategori
    {
        public Kategori()
        {
            this.Children = new List<Kategori>();
        }
        public int ID { get; set; }

        public string Name { get; set; }

        public int ParentID { get; set; }

        public virtual List<Kategori> Children { get; set; }


    }

Контроллер

public ActionResult Index()
    {


        context = new CrudContext();
        List<Kategori> kategoriler= context.Kategoriler.ToList();


        return View(kategoriler);
    }

Я думаю, что моя проблема в моейПросмотр.

Просмотр

@model List<JQueryDataTableCrud.Models.Kategori>
@RecursiveMenu(Model)

<div>
    @helper RecursiveMenu(List<JQueryDataTableCrud.Models.Kategori> kategoriler)
        {
    <ul>
        @foreach (var item in kategoriler)
        {

                <li>
                    <span>@item.Name</span>

                    @if (item.Children.Any() && item.Children != null)
                    {

                        @RecursiveMenu(item.Children)

                    }

                </li>
            }
        }
    </ul>
}

</div>

Результат

.Elektronik
  -Cep Telefonu
  -Mutfak
.Bilgisayar
.Cep Telefonu
.Mutfak

1 Ответ

0 голосов
/ 15 мая 2018

Если вы храните все свои Kategori в одной и той же таблице, вам понадобится способ отличить родительский элемент от дочернего в первоначальном запросе.

var kategoriler = context.Kategoriler.Where(k => k.ParentID == 0).ToList();

/*
.Elektronik
  -Cep Telefonu
  -Mutfak
.Bilgisayar
*/

Это должно ограничить верхний уровень двумя родительскими элементами. Это предполагает, что вы установили ParentID = 0; Это также предполагает, что ваш контекст заполняет Children.

Ваша рекурсивная рутина должна быть в порядке

@helper RecursiveMenu(List<JQueryDataTableCrud.Models.Kategori> kategoriler)
{
    @foreach (var item in kategoriler)
    {
        <span>@item.Name</span>

        @if (item.Children.Any() && item.Children != null)
        {
            @RecursiveMenu(item.Children)
        }
    }
}
...