创建3列的复选框布局

本文关键字:布局 复选框 3列 创建 | 更新日期: 2023-09-27 18:11:15

我正在尝试将复选框列表安排为3列,例如:

A    F    L
B    G    M
C    H    N
D    I    O
E    K    ...

目前我有这样做的代码,但是如果复选框的数量不能被3整除,那么它就会超出范围并抛出空引用异常。我所拥有的复选框的数量可以变化,所以我不能把它硬化为一个能被3整除的数字。

这是我目前拥有的代码:

@{
    var rows = (Model.BettingOffices.Count()) % 10 == 0
        ? (Model.BettingOffices.Count) / 10
        : ((Model.BettingOffices.Count) / 10) + 1;
}
<table>
    @for (int i = 0; i < rows; i++)
    {
        <tr>
            <td width="400">
                @Model.BettingOffices.Skip(i).FirstOrDefault().OfficeName
                <input name="selectedShops" type="checkbox" 
                    value="@Model.BettingOffices[i].OfficeName"/>
            </td>
            <td width="400">
                @Model.BettingOffices.Skip(i + rows).FirstOrDefault().OfficeName
                <input name="selectedShops" type="checkbox" 
                    value="@Model.BettingOffices[i + rows].OfficeName" />
            </td>
            <td width="400">
                @Model.BettingOffices.Skip(i + rows * 2).FirstOrDefault().OfficeName
                <input name="selectedShops" type="checkbox" 
                    value="@Model.BettingOffices[i + rows * 2].OfficeName" />
        </tr>
    }
</table>

是否有任何方法可以阻止它超出范围并抛出异常?

创建3列的复选框布局

使用CSS,停止使用HTML作为布局样式。

<ul class="checkboxes">
    <li><label><input type="checkbox"/> CheckBox 1</label></li>
    <li><label><input type="checkbox"/> CheckBox 2</label></li>
    <li><label><input type="checkbox"/> CheckBox 3</label></li>
    ...
</ul>
CSS

.checkboxes ul, .checkboxes li {
    margin:0;
    padding:0;
    list-style:none;
}
.checkboxes li {
    display:inline-block;
    width:33.3333%;
}

您可能需要稍微调整一下显示,但这将使您基本达到目的。列表项将尽可能多地填充一行,然后自动换行到下一行,因此基于33.3333%的宽度,您将每行获得3个。

或者,更好的是通过使用一些带有网格的CSS库来完全响应(你可以自己滚动,但是为什么呢?)例如,对于Bootstrap,您可以这样做:

<ul class="list-unstyled row">
    <li class="col-md-4 col-xs-6"><label><input type="checkbox"/> CheckBox 1</label></li>
    <li class="col-md-4 col-xs-6"><label><input type="checkbox"/> CheckBox 2</label></li>
    <li class="col-md-4 col-xs-6"><label><input type="checkbox"/> CheckBox 3</label></li>
    ...
</ul>

不需要额外的CSS,你得到的奖励是能够改变多少出现在一行响应。例如,在上面的代码中,中型及以上的显示每行有三个(Bootstrap使用12列网格,所以三分之一是4),而非常小的显示,如纵向显示的手机将只有2(12/2 = 6)。这是 比使用HTML更灵活,特别是对于绝对会占用小型设备显示的表格。