循环使用Razor中的模型内容

Rod*_*ers 11 c# asp.net-mvc razor asp.net-mvc-4

我想通过我在我的Razor视图模型中的每个项循环,但我希望将所有物品放在一起.然后我想循环遍历每个组.想象一下,我有一张桌子:

ID   GroupNo    GroupName
1    1          Group1
2    1          Group2
3    1          Group3
4    2          Group1
5    2          Group2
6    3          Group56
Run Code Online (Sandbox Code Playgroud)

我想做的事情如下:

@foreach (var group in Model.GroupNo) {
    <section>
        <header>Group No is @group.GroupNo</header>
        @foreach (var item in group) {
            <p>GroupName: @item.GroupName</p>
        }
    </section>
} 
Run Code Online (Sandbox Code Playgroud)

所以我的输出是:

Group No is 1
GroupName: Group1
GroupName: Group2
GroupName: Group3
Group No is 2
GroupName: Group1
GroupName: Group2
Group No is 3
GroupName: Group56
Run Code Online (Sandbox Code Playgroud)

这可能吗?

谢谢

McG*_*gle 28

是的,这很容易使用Linq GroupBy.我建议您更改要使用的视图@model IEnumerable<IGrouping<string, MyModel>>,您可以像这样填充:

var groupModel = MyModelCollection.GroupBy(item => item.GroupNo).ToArray();
return View(groupModel);
Run Code Online (Sandbox Code Playgroud)

然后,只需在编写时遍历该组,除了使用group.Key而不是group.GroupNo检索IGrouping的键:

@foreach (var group in Model) {
    <section>
        <header>Group No is @group.Key</header>
        @foreach (var item in group) {
            <p>GroupName: @item.GroupName</p>
        }
    </section>
} 
Run Code Online (Sandbox Code Playgroud)


cod*_*biz 10

LINQ可以帮助您做到这一点

@model IEnumerable<Project1.Models.Group>


@foreach (var item in Model.Select(i=>i.groupno).Distinct().ToList()) {
    <tr>
        <td>
            <header>Group No is @item</header>
            @foreach (var grpName in Model.Where(i => i.groupno == item).ToList())
            {
                <p>GroupName: @grpName.groupName</p>
            }
        </td>
    </tr>
}
Run Code Online (Sandbox Code Playgroud)