Как насчет группировки вашего набора данных перед его печатью? В ASP.NET MVC это называется моделью представления. К сожалению, в WebMatrix у вас нет контроллера, который мог бы выполнить работу по подготовке этой модели представления, но вы могли бы сделать это в codebehind или как бы этот раздел страницы Razor назывался:
@{
// group the dataset by 3 elements
var data = Enumerable.Range(0, 20).GroupBy(x => x / 3);
}
<table>
@foreach (var group in data)
{
<tr>
@foreach (var item in group)
{
<td>@item</td>
}
@for (int i = 0; i < 3 - group.Count(); i++)
{
<td>empty</td>
}
</tr>
}
</table>
и если у вас есть набор данных сложных объектов, а не только целых чисел, вот как можно сделать группировку:
var dataset = Enumerable.Range(0, 20).Select(x => new { Text = "item " + x });
var data = dataset
.Select((value, index) => new { Index = index / 3, Item = value })
.GroupBy(pair => pair.Index);
и затем:
<table>
@foreach (var group in data)
{
<tr>
@foreach (var element in group)
{
<td>@element.Item.Text</td>
}
@for (int i = 0; i < 3 - group.Count(); i++)
{
<td>empty</td>
}
</tr>
}
</table>
Это делает код более читабельным. Как вы можете видеть, использование модели представления позволяет избежать написания некрасивого кода спагетти в представлениях.
Каждый раз, когда у вас есть несколько непревзойденных тегов, и вам нужно делать целочисленные деления и деления по модулю и прочее в представлении, вы, вероятно, делаете это неправильно, поскольку не выбрали правильную модель представления.