每隔4个循环新表行

use*_*794 6 .net c# razor asp.net-mvc-3

如何在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++;
         }
Run Code Online (Sandbox Code Playgroud)

Guf*_*ffa 21

使用模运算符.用于:

if((i % 4) == 0)
{
  @:<tr>
}
Run Code Online (Sandbox Code Playgroud)

if((i % 4) == 3)
{
  @:</tr>
}
Run Code Online (Sandbox Code Playgroud)

如果项目数不分成偶数行,则在循环后添加剩余单元格和结束行标记:

if ((i % 4) != 0) {
  while (i % 4) != 0) {
    @:<td></td>
    i++;
  }
  @:</tr>
}
Run Code Online (Sandbox Code Playgroud)


T-m*_*oty 6

对于那些讨厌上面的答案代码出现的语法高亮警告的人,有解决方案(机制大致相同):

<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>
Run Code Online (Sandbox Code Playgroud)

每个标签都在正确的位置(<td>内部<tr>,<tr>内部<table>),然后您的Visual Studio语法荧光笔将让您安心:-)