助手 ShowTree 显示子项 2 次

Helper ShowTree Displaying Child Items 2 Times

我在我的项目中使用@Helper ShowTree,但我对子项目有疑问。在我看来,子项目显示 2 次并且看起来像父菜单。我在现场查看了样本,但没有发现差异。我哪里错了?

我的实体

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

如果您将所有 Kategori 存储在同一个 table 中,那么您将需要一种方法来区分 parent 和 child初始查询。

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

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

这应该将 top-level 限制为两个 parent 项。这假设你设置 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)
        }
    }
}