Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.net MVC中呈现列表的子列表_C#_Asp.net Mvc_Razor - Fatal编程技术网

C# 在.net MVC中呈现列表的子列表

C# 在.net MVC中呈现列表的子列表,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我仍在学习.NETMVC,可能没有正确地寻找我需要的解决方案 简言之,我在数据库中有一个表,其结构如下: ID Category Subcategory FK 因此,每个类别以及每个子类别都可能出现多次,这是该类别所特有的 我希望在视图中呈现如下所示的菜单: Category 1 Subcategory 1a Subcategory 1b Subcategory 1c Category 2 Subcategory 2a Subcateg

我仍在学习.NETMVC,可能没有正确地寻找我需要的解决方案

简言之,我在数据库中有一个表,其结构如下:

ID    Category    Subcategory    FK
因此,每个类别以及每个子类别都可能出现多次,这是该类别所特有的

我希望在视图中呈现如下所示的菜单:

Category 1
    Subcategory 1a
    Subcategory 1b
    Subcategory 1c
Category 2
    Subcategory 2a
    Subcategory 2b
等等。现在在控制器中我有:

var categories = db.Category
                     .Where(oa => oa.Category != "")
                     .GroupBy(oa => new { oa.Category, oa.Subcategory })
                     .Select(oa => oa.FirstOrDefault());
然而,我不确定如何在视图中实现我想要实现的目标。我知道我必须以某种方式循环浏览列表,但我不知道如何循环。我知道这涉及到以下几点:

@foreach (var item in Model)
{
    <li>
        <a id="@item.ID" href="#">@item.Category</a>
    </li>
}
@foreach(模型中的变量项)
{
  • }

    但我只希望每个类别显示一次,然后需要所有子类别显示在父类别下。或者我可能需要更改控制器及其发送数据的方式?

    首先创建一个简单的视图模型来表示要在视图中显示的内容

    public class CategoryVM
    {
        public string Name { get; set; }
        public IEnumerable<string> SubCategories { get; set; }
    }
    
    @model IEnumerable<CategoryVM>
    ....
    @foreach(var category in Model)
    {
        <h2>@category.Name</h2>
        <ul>
            @foreach(var subCategory in category.SubCategories)
            {
                <li>@subCategory</li>
            }
        </ul>
    }
    
    在我看来

    public class CategoryVM
    {
        public string Name { get; set; }
        public IEnumerable<string> SubCategories { get; set; }
    }
    
    @model IEnumerable<CategoryVM>
    ....
    @foreach(var category in Model)
    {
        <h2>@category.Name</h2>
        <ul>
            @foreach(var subCategory in category.SubCategories)
            {
                <li>@subCategory</li>
            }
        </ul>
    }
    
    @model IEnumerable
    ....
    @foreach(模型中的var类别)
    {
    @类别.名称
    
      @foreach(类别中的var子类别。子类别) {
    • @子类别
    • }
    }
    首先创建一个简单的视图模型来表示要在视图中显示的内容

    public class CategoryVM
    {
        public string Name { get; set; }
        public IEnumerable<string> SubCategories { get; set; }
    }
    
    @model IEnumerable<CategoryVM>
    ....
    @foreach(var category in Model)
    {
        <h2>@category.Name</h2>
        <ul>
            @foreach(var subCategory in category.SubCategories)
            {
                <li>@subCategory</li>
            }
        </ul>
    }
    
    在我看来

    public class CategoryVM
    {
        public string Name { get; set; }
        public IEnumerable<string> SubCategories { get; set; }
    }
    
    @model IEnumerable<CategoryVM>
    ....
    @foreach(var category in Model)
    {
        <h2>@category.Name</h2>
        <ul>
            @foreach(var subCategory in category.SubCategories)
            {
                <li>@subCategory</li>
            }
        </ul>
    }
    
    @model IEnumerable
    ....
    @foreach(模型中的var类别)
    {
    @类别.名称
    
      @foreach(类别中的var子类别。子类别) {
    • @子类别
    • }
    }
    如果是树或更高级别的列表,代码是什么?我的意思是子列表下有更多的子列表。@SumonTito。您将需要一个分层视图模型-请参考示例,以及如何在控制器中填充它。然后,如果您希望最初呈现整个树(不使用jquery插件),那么您需要一个递归方法来生成html-如果需要进一步帮助,请参考使用扩展方法的示例,然后你需要问一个新的问题。谢谢亲爱的,我提出了一个问题,但无法得到我的解决方案,我现在提交你的建议给一个开发人员,他可能会帮助我。我也感谢你的支持。上帝保佑你:)如果是树或更高级别的列表,代码是什么?我的意思是子列表下有更多的子列表。@SumonTito。您将需要一个分层视图模型-请参考示例,以及如何在控制器中填充它。然后,如果您希望最初呈现整个树(不使用jquery插件),那么您需要一个递归方法来生成html-如果需要进一步帮助,请参考使用扩展方法的示例,然后你需要问一个新的问题。谢谢亲爱的,我提出了一个问题,但无法得到我的解决方案,我现在提交你的建议给一个开发人员,他可能会帮助我。我也感谢你的支持。上帝保佑你:)