动态引导网格布局

韩国电视台

我正在尝试使用Bootstrap和C#创建动态网格布局。

我试图用HTML实现的是这样的:

<div class="row">
  <div class="col-md-3"></div>
  <div class="col-md-3"></div>
  <div class="col-md-3"></div>
  <div class="col-md-3"></div>
</div>

<div class="row">
  <div class="col-md-3"></div>
  <div class="col-md-3"></div>
  <div class="col-md-3"></div>
  <div class="col-md-3"></div>
</div>

基本上,中继器将col-md-3 div包裹起来。

我认为我有:

@{
    int productsPerRow = 4;
    int products = 8;

    for (int i = 1; i <= products; i++)
    {
        bool startDiv = (i % (productsPerRow + 1) == 0);

        @Html.Raw(startDiv ? "<div class='row'>" : "");

        @Html.Raw("<div class="col-md-3"></div>");

        bool endDiv = (i % productsPerRow == 0) || (i != 1 && i == productsPerRow);
        @Html.Raw(endDiv ? "</div>" : "");
    }

}

从我认为的代码中,它试图执行的操作是创建<div class="row">到达时的内容productsPerRow + 1,同时执行一次操作,也可以通过productsPerRow检查将其整除。

然后,当然要通过</div>在达到productPerRow追加来关闭div

但是,这并没有达到预期的效果,而是像这样打印:

  <div class="col-md-3"></div>
  <div class="col-md-3"></div>
  <div class="col-md-3"></div>
  <div class="col-md-3"></div>
</div>
<div class='row'>
  <div class="col-md-3"></div>
  <div class="col-md-3"></div>
  <div class="col-md-3"></div>
  <div class="col-md-3"></div>
</div>

我可能做错了什么?有没有更简单的方法可以做到这一点?

查伊姆·弗里德曼(Chayim Friedman)

您错是因为1 % 51,但是当i1时这是第一行,<div>应该是。因此,代替i % (productsPerRow + 1)使用(i - 1) % productsPerRow

@{
    int productsPerRow = 4;
    int products = 8;

    for (int i = 1; i <= products; i++)
    {
        bool startDiv = ((i - 1) % productsPerRow  == 0);

        @Html.Raw(startDiv ? "<div class='row'>" : "");

        @Html.Raw("<div class="col-md-3"></div>");

        bool endDiv = (i % productsPerRow == 0) || (i != 1 && i == productsPerRow);
        @Html.Raw(endDiv ? "</div>" : "");
    }

}

但是我认为使用嵌套循环会更漂亮:

@{
  const int productsPerRow = 4;
  int products = 8;
  const int rows = (int)Math.Ceiling((double)products / productsPerRow); // Because if one products need one more row, we should one more row, so I round up
}

@for (int i = 0, productNum = 0; i < rows; i++, productNum++)
{
  <div class="row">
    @for (int j = 0; j < productsPerRow && productNum < products; j++, productNum++)
    {
      <div class="col-md-3">@productsArr[productNum]</div>
      @* This is an example how to access the products if stored in an array via nested loop *@
    }
  </div>
}

编辑:

先前的版本有一个错误-例如,如果有9个产品,rows则将分配给3,外部循环将运行3次,在第三次迭代中,嵌套循环将运行4次(productsPerRow次),甚至认为只剩下一种产品。为了解决这个问题,我附加了一个名为的变量productNum,该变量存储当前产品的索引(用于计算其值的代码有些复杂;您可以对其进行调试并查看该变量的正确更改方式)。然后,在嵌套循环中,我还要检查是否没有完成迭代的产品(productNum < products)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章