剃刀 – 使用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
,以防您需要循环内的信息。