Helper ShowTree显示子项目2次

时间:2018-05-15 17:50:13

标签: asp.net-mvc recursion html-helper

我在我的项目中使用@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 :(得分:1)

如果您将所有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)
        }
    }
}