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

C# 如何在Asp.NET MVC上列出无限嵌套类别?,c#,asp.net-mvc,nested-lists,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 我的视图模型 public class Categor

我想创建嵌套的类别。。喜欢

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

我的视图模型

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; }
    }
我的观点(我必须改变它,我知道)

但必须如此;真实清单

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

我犯了一个错误,但我找不到视图,我对视图也没有任何概念。

您需要将其作为一个函数,并递归调用它:

@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)
@helper打印类别(动态类别)
{
foreach(类别中的var项目)
{
@item.CategoryName

var子类别=项。子类别; if(子类别!=null&&subCategories.Count>0) { 印刷品类别(子类别); } } } @打印类别(Model.categories)
我自己找到了解决方案:

当我添加
.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);
}
供查阅;
检查..

有什么问题,您是否担心空间或速度?如果是这样的话,您不必一次提取所有级别。您可以使用浏览长表时使用的相同“分页”逻辑。您使用哪个控件来显示这些记录?对不起,伙计们,我对我的问题做了一些更改。。请再次检查。如何在
GenerateSub
中获得
List
?使用此“私有列表GenerateSub(列表类别){”谢谢你的回答,但这是供查看的唯一答案。我更改了你的答案;我添加了控制器。因为第一次我必须只发送顶级父类别。我不太理解你的编辑。如果你想要单个“根”类别,只需交换“根类别”中的“类别”,并将其缝合在一起。我将您的问题理解为询问如何在视图中显示此内容。我将此标题添加到我的问题中;“FALSE LISTING”和“TRUE LISTING”。如果您再次检查此问题,您可以理解..当我不添加时。.其中(x=>x.ParentCategoryID==null)此代码返回FALSE LISTING。。
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
@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)
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);
}