I have a list of labels for printing. Now I have go over the list and print the labels. The layout is specified by how many labels per page and per row on a page I can print.
@{
var labels = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 };
var labelsPerPage = 10;
var labelsPerRow = 2;
var labelCount = labels.Count;
}
@for (var i = 0; i < labelCount; i++) {
if (i % labelsPerPage == 0) {
@Html.Raw("<table class=\"page\">")
}
if (i % labelsPerRow == 0) {
@Html.Raw("<tr>")
}
<td class="label">@PrintLabel(labels[i])</td>
if (i % labelsPerRow == (labelsPerRow - 1)) {
@Html.Raw("</tr>")
}
if (i % labelsPerPage == (labelsPerPage - 1)) {
@Html.Raw("</table>")
}
}
@helper PrintLabel(int label) {
@label
}
Is there a better method (eg. using LINQ or nested for
/foreach
loops) for going through the list and doing something at the start and end of each page and each row?
I would prefer a nested structure to a flat one so it can be used inside a Razor template. The flat version fails here because Razor requires HTML tags to be closed at the end of a code block.
I'm not looking for performance here, I'd rather have more readable code and possibly getting rid of any Html.Raw()
calls.