如何使用部分视图列出无限数量的嵌套类别和子类别。(.NET CORE 5.0)

Posted

技术标签:

【中文标题】如何使用部分视图列出无限数量的嵌套类别和子类别。(.NET CORE 5.0)【英文标题】:How do I list an indefinite number of nested categories and subcategories with a partial view.(.NET CORE 5.0) 【发布时间】:2021-09-10 21:43:32 【问题描述】:

我是编程新手。我想列出嵌套编号不清楚的类别。作为我研究的结果,我决定我可以在单个数据库表中执行此操作。我认为我应该为此使用递归结构并决定使用 partialview。

数据库实体

public class Categories 
    public int ID  get; set; 
    public int ParentCatID  get; set; 
    public string CategoryName  get; set; 
    public string Instruction  get; set; 

PartialView 我正在尝试写

不使用 PartialView 可以吗?

我想实现这个输出

【问题讨论】:

【参考方案1】:

public class Categories

    public int ID  get; set; 

    public int? ParentCatID  get; set; 

    public Categories ParentCat  get; set; 

    public string CategoryName  get; set; 

    public string Instruction  get; set; 

    public IList<Categories> Children  get; protected set;  = new List<Categories>();

视图模型

public class CategoriesViewModel

    public CategoriesViewModel()
    
        ChildItems = new List<CategoriesViewModel>();
    

    public long ID  get; set; 

    public string CategoryName  get; set; 

    public string Instruction  get; set; 

    public CategoriesViewModel ParentCatID  get; set; 

    public IList<CategoriesViewModel> ChildItems  get; set; 

    public void AddChildItem(CategoriesViewModel childItem)
    
        childItem.ParentCatID = this;
        ChildItems.Add(childItem);
    

控制器

public IActionResult List()

    var categories = _context.ToList(); // example

    var categoryItems = new List<CategoriesViewModel>();

    var topCategories = categories.Where(x => !x.ParentCatID.HasValue);
    foreach (var category in topCategories)
    
        var categoryMenuItem = Map(category);
        categoryItems.Add(categoryMenuItem);
    

    return View(categoryItems);


private CategoriesViewModel Map(Categories category)

    var categoryMenuItem = new CategoriesViewModel
    
        ID = category.ID,
        CategoryName = category.CategoryName,
        Instruction = category.Instruction
    ;

    var childCategories = category.Children;
    foreach (var childCategory in childCategories)
    
        var childCategoryMenuItem = Map(childCategory);
        categoryMenuItem.AddChildItem(childCategoryMenuItem);
    

    return categoryMenuItem;

查看

@model IEnumerable<CategoriesViewModel> 
    
@foreach (var item in Model)

    if (item.ChildItems.Any())
    
        <li>
            <span>@item.CategoryName</span>
            <ul class="dropdown">
                <li>
                    @foreach (var childItem in item.ChildItems)
                    
                        <span>@childItem.CategoryName</span>
                    
                </li>
            </ul>
        </li>
    
    else
    
        <li><span>@item.CategoryName</span></li>
    

【讨论】:

Partial View 你的意思是View吗? 部分视图。查看。 Teşekkür ederim 。模型 de neden 类别 adında tekrardan bir 财产 oluşturuyoruz。 Onu araştırmam için bana bir 关键字 söyler misin ? Mantığı ne? Aynı 财产 tekrardan kullanabilmek için birbirine bağlıyorsun。 Tabi farklı tablo 财产 kullanmak istersen onuda bağlayabilirsin。

以上是关于如何使用部分视图列出无限数量的嵌套类别和子类别。(.NET CORE 5.0)的主要内容,如果未能解决你的问题,请参考以下文章

php 列出根和子类别,包括他们发布的帖子

Excel 图表 - 类别和子类别分组

Django,类别和子类别

如何在 Magento 中使用产品 URL 附加类别和子类别 slug

如何获取所有类别和子类别?

使用beautifulsoup刮擦类别和子类别