【问题标题】:Rendering a sublist of a list in .net MVC在.net MVC中呈现列表的子列表
【发布时间】:2017-04-04 06:46:31
【问题描述】:

我仍在学习 .net MVC,可能没有正确搜索我需要找到解决方案的内容。

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

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>
}

但我只希望每个类别出现一次,然后需要所有子类别出现在父类别下。或者我可能需要更改控制器以及它如何发送数据?

【问题讨论】:

    标签: c# asp.net-mvc razor


    【解决方案1】:

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

    public class CategoryVM
    {
        public string Name { get; set; }
        public IEnumerable<string> SubCategories { get; set; }
    }
    

    然后将您的查询投影到该视图模型的集合并将其返回到视图

    var model = db.Category.Where(x => x.Category != "")
        .GroupBy(x => x.Category).Select(x => new CategoryVM
        {
            Name = x.Key,
            SubCategories = x.Select(y => y.Subcategory)
        });
    return View(model);
    

    在视图中

    @model IEnumerable<CategoryVM>
    ....
    @foreach(var category in Model)
    {
        <h2>@category.Name</h2>
        <ul>
            @foreach(var subCategory in category.SubCategories)
            {
                <li>@subCategory</li>
            }
        </ul>
    }
    

    【讨论】:

    • 如果是树或更多级别的列表,代码是什么?我的意思是子列表下有更多的子列表。
    • @SumonTito。您将需要一个分层视图模型 - 以 How to create dynamic menu using tree 为例,以及如何在控制器中填充它。
    • 那么如果你想最初渲染整个树(不使用 jquery 插件),那么你需要一个递归方法来生成 html - 参考How to render singly Linked list in MVC View page 使用扩展方法的例子
    • 如果您需要进一步的帮助,那么您需要提出一个关于 SO 的新问题。
    • 谢谢亲爱的,我提出了一个问题,但无法得到我的解决方案,我现在将您的建议提交给开发人员,也许他可以帮助我。我也感谢您的支持。上帝保佑你:)
    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 2021-01-24
    • 2020-06-14
    • 1970-01-01
    • 2012-07-29
    • 2023-04-04
    • 2017-12-28
    • 2011-01-23
    相关资源
    最近更新 更多