我在我的项目中使用@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
答案 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)
}
}
}