剃刀 – 使用foreach,每隔n项插入html

我正在使用Razor和MVC 5在我的页面上输出大量项目。这是我目前所拥有的:

@foreach (var item in Model.Items) { @item.Name } 

我想要做的是输出这个:

    

我需要在div标签中对每4个项目进行分组。 我怎么能在剃刀中做到这一点?

不确定是否要增加Item编号(或者如果@item.Name实际上包含递增的编号),但以下代码将增加类名称(每4次迭代一次新的div )和项目编号。

 @{ var t = 0; var i = 1; } 
@foreach (var item in Model.Items) { Item @i // this may be just @item.Name? if (i % 4 == 0) { t++; @:
} i++; }

foreach没有给你索引。 那是C#。

我建议你改成它。

 @foreach (var index = 0; index < Model.Items.Count; index++) { var item = Model.Items[index]; @item.Name @* Use `item` or `index` as you wish here *@ } 

也许你会使用Length而不是Count 。 如果Model.Items只是IEnumerable而不是数组或List<> ,你可能想要调用Model.Items.ToList()等。你可能会得到这个想法。

这是我对解决方案的看法。 请记住,我自己没有编译代码,所以请检查它:

 foreach(var item in Model.Items.Select((x, i) => new {Index = i, Value = x})) { if (item.Index % 4 == 0) { 
} Item @(item.Index + 1) if (item.Index % 4 == 0) {
} } // If the number of items has a remainder of 4, close the div tag if(Model.Items.Count %4 != 0) { @: }

我已经在Linq Select中添加了Value ,以防您需要循环内的信息。