如何在Razor View中的每个第4个循环上创建一个新的表格行?这是为4之前的每个数字创建一个新行,然后退出创建新行:
@{
int i = 0;
}
@foreach (var item in ViewBag.ProgramIdList)
{
if((i / 4) == 0)
{
@:<tr>
}
<td>
<input type="checkbox" name="@item.ProgramId" id="@item.ProgramId" />
<label for="@item.ProgramTitle">@item.ProgramTitle</label>
</td>
if((i / 4) == 0)
{
@:</tr>
}
i++;
}
答案 0 :(得分:19)
使用模运算符。对于:
if((i % 4) == 0)
{
@:<tr>
}
和
if((i % 4) == 3)
{
@:</tr>
}
如果项目数不分成偶数行,您可以在循环后添加剩余的单元格和结束行标记:
if ((i % 4) != 0) {
while (i % 4) != 0) {
@:<td></td>
i++;
}
@:</tr>
}
答案 1 :(得分:6)
对于那些讨厌使用上面答案的代码出现的语法higlight警告的人,有解决方案(机制大致相同):
<table>
@for (int i = 0; i < ViewBag.MyItems.Count; i++)
{
var cells = 4;
var item = ViewBag.MyItems[i];
if ((i % cells) == 0)
{
@:<tr>
}
<td>
@item.MyTextOrWhatever
</td>
if (i == (ViewBag.MyItems.Count - 1))
{
while ((i % cells) != 0)
{
@:<td></td>
i++;
}
}
if ((i % cells) == (cells - 1)) // aka: last row cell
{
@:</tr>
}
}
</table>
每个标记位于正确位置(<td>
内<tr>
,<tr>
内<table>
},然后您的Visual Studio语法荧光笔将让您安心:-)
答案 2 :(得分:0)
100%有效的确切解决方案。
@foreach (var item in ViewBag.data)
{
var cells = totalCells;
if ((i % cells) == 0)
{
@:<tr>
}
<td>
@item.Value
</td>
if ((i % cells) == (cells - 1)) // aka: last row cell
{
@:</tr>
}
i++;
}