如何在Asp.NET MVC上列出无限嵌套类别?

时间:2013-10-03 06:41:15

标签: c# asp.net-mvc nested-lists

我想制作嵌套类别..赞;

Category 1
   Sub Category 1.1
      Sub Category 1.1.1
         ..
            Sub Category 1.1.1.1.1.1.1.1
Category 2
   Sub Category 2.1
   Sub Category 2.2
      Sub Categry 2.2.1
Category 3

我的数据库shcema;

enter image description here

我的ViewModel;

public class CategoriesViewModel
    {
        public CategoriesViewModel()
        {
            AltGroup = new List<CategoriesViewModel>();
        }

        public int CategoryID { get; set; }
        public string CategoryName { get; set; }    
        public List<CategoriesViewModel> SubCategories{ get; set; }
    }

我的功能;

private List<CategoriesViewModel> GenerateSub(List<Categories> categories)
        {
            List<CategoriesViewModel> categories= new List<CategoriesViewModel>();

            foreach (var child in categories)
            {
                var subCategories = GenerateChildren(child.Categories1.ToList());
                subCategories.Add(new CategoriesViewModel{ CategoryName = child.RoleGroupAdi, SubCategories= subCategories });
            }

            return subCategories;
        }

我的控制器文件;

private DbEntities db = new DbEntities();
public ActionResult KullaniciYetkiGuncelle(int id = 0)
        {
            ViewModel vm = new ViewModdel();
            vm.categories = GenerateSub(db.Categories.ToList());
            return View(vm);
        }

我的观点(我必须改变它,我知道);

@foreach (var item in Model.categories)
{
    @item.CategoryName
    <br />
    foreach (var item2 in item.SubCategories)
    {
        @item2.CategoryName
        <br />
        foreach (var item3 in item2.SubCategories)
        {
            @item3.CategoryName
            <br />
        }
    }
}

结果;错误的列表

Sub Category 1.1
Category 1
   Sub Category 1.1
   Sub Category 1.2
      Sub Category 1.2.1
      Sub Category 1.2.2
      Sub Category 1.2.3
Sub Category 1.2
   Sub Category 1.2.1
   Sub Category 1.2.2
   Sub Category 1.2.3
Sub Category 1.2.1
Sub Category 1.2.2
Sub Category 1.2.3

但它一定是;真正的上市

Category 1
   Sub Category 1.1
   Sub Category 1.2
      Sub Category 1.2.1
      Sub Category 1.2.2
      Sub Category 1.2.3

我犯了错误,但我找不到,我对View没有任何想法。

2 个答案:

答案 0 :(得分:2)

你需要使它成为一个函数,并递归调用它:

@helper PrintCategories(dynamic categories)
{
    foreach (var item in categories)
    {
        @item.CategoryName
        <br />
        var subCategories = item.SubCategories;
        if (subCategories != null && subCategories.Count > 0)
        {
            PrintCategories(subCategories);
        }
    }
}


@PrintCategories(Model.categories)

答案 1 :(得分:0)

我自己找到了解决方案:

当我添加.Where(x => x.ParentCategoryID == null)时,它会返回正确的列表。

据此,控制器变为:

private DbEntities db = new DbEntities();
public ActionResult KullaniciYetkiGuncelle(int id = 0)
{
     var vm = new ViewModdel();
     vm.categories = GenerateSub(db.Categories.Where(x=>x.ParentCategoryID == null).ToList());
     return View(vm);
}

For View; 查看checked answer ..