我正在尝试使用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>
我可能做错了什么?有没有更简单的方法可以做到这一点?
您错是因为1 % 5
1,但是当i
1时这是第一行,<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] 删除。
我来说两句