Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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
Asp.net mvc 4 如何列出按类别分组的项目?_Asp.net Mvc 4 - Fatal编程技术网

Asp.net mvc 4 如何列出按类别分组的项目?

Asp.net mvc 4 如何列出按类别分组的项目?,asp.net-mvc-4,Asp.net Mvc 4,我正在努力学习MVC,并找到一些障碍 我试图找到一种可维护的方式来显示按类别标题划分的项目列表。例如: 主菜 汤 面包 主要 鸡肉 牛肉 素食者 沙漠 蛋糕 冰激凌 类别和项目是独立的模型,项目模型保存类别的ID 我想把这些网页交给熟悉HTML但不熟悉ASP的人。出于这个原因,我希望将嵌入页面中的代码保持在最低限度。这是到目前为止我所拥有的最好的,但是我不喜欢为每个项目使用和检查一个变量 @{string categoryName = null;} @foreach (var item in M

我正在努力学习MVC,并找到一些障碍

我试图找到一种可维护的方式来显示按类别标题划分的项目列表。例如:

主菜 汤
面包

主要 鸡肉
牛肉
素食者

沙漠 蛋糕
冰激凌

类别和项目是独立的模型,项目模型保存类别的ID

我想把这些网页交给熟悉HTML但不熟悉ASP的人。出于这个原因,我希望将嵌入页面中的代码保持在最低限度。这是到目前为止我所拥有的最好的,但是我不喜欢为每个项目使用和检查一个变量

@{string categoryName = null;}
@foreach (var item in Model) {
    if (item.CategoryName != categoryName)
    {
        categoryName = item.CategoryName;
    <tr>
        <td colspan="5">@Html.DisplayFor(modelItem => categoryName)</td>
    </tr>
    }
    <tr><!-- Display item here --></tr>
}
@{string categoryName=null;}
@foreach(模型中的var项目){
如果(item.CategoryName!=CategoryName)
{
categoryName=item.categoryName;
@DisplayFor(modelItem=>categoryName)
}
}
是否有一种嵌套页面的方法,这样我就可以创建一个循环遍历每个类别的父页面,并调用一个循环遍历该类别中的项目的子页面?例如,类似于:

@foreach (var item in Model) {
    <tr>
        <td colspan="5">@Html.DisplayFor(modelItem => item.Name)</td>
    </tr>
    @RenderChildren(item.Children);
}
@foreach(模型中的变量项){
@DisplayFor(modelItem=>item.Name)
@RenderChildren(项目.子项);
}

我建议返回一个视图模型,使用
GroupBy
对项目进行预分组:

return View(TheModel.GroupBy(item => item.Category).ToArray());
此视图可以迭代组,显示每个(
)的标题,并将项目集合发送到局部视图:

@model IEnumerable<IGrouping<string, MyModel>> 

@foreach (var grp in Model)
{
    <tr>
        <th colspan="5">@grp.Key</th>
    </tr>

    @Html.Partial("Meals", grp.ToArray())
}
@model IEnumerable<MyModel>

@foreach (var item in Model)
{
    <tr>
        <td>@Model.Name</td>
    </tr>
}