C# 如何使用Razor通过循环正确生成引导网格?

C# 如何使用Razor通过循环正确生成引导网格?,c#,asp.net,asp.net-mvc,twitter-bootstrap,razor,C#,Asp.net,Asp.net Mvc,Twitter Bootstrap,Razor,我使用ASP.NETMVC和bootstrap。我的集合中有许多对象(>2个),每个对象都需要一个,但一行中只有2个列。如何使用循环来实现这一点? 有一种方法,但我正在寻找更好的方法: @model List<Object> @using (Html.BeginForm("ActionName", "ControllerName")) { <div class="row"> @for (int i = 0; i < Model.Count; i++)

我使用ASP.NETMVC和bootstrap。我的集合中有许多对象(>2个),每个对象都需要一个
,但一行中只有2个列。如何使用循环来实现这一点? 有一种方法,但我正在寻找更好的方法:

@model List<Object>
@using (Html.BeginForm("ActionName", "ControllerName"))
{
    <div class="row">
    @for (int i = 0; i < Model.Count; i++)
    {
        if (i % 2 != 0) {
        <div class="row">
            <div class="col-xs-6">
                @Html.TextBoxFor(o => o[i].Value)
            </div>
        </div>
        } else {
            <div class="col-xs-6">
            @Html.TextBoxFor(o => o[i].Value)
            </div>
        }
    }
    </div>
}
@型号列表
@使用(Html.BeginForm(“ActionName”、“ControllerName”))
{
@for(int i=0;io[i].Value)
}否则{
@Html.TextBoxFor(o=>o[i].Value)
}
}
}

关闭行
div
,并在每第二次迭代时在循环中启动一个新的行

<div class="row">
    @for (int i = 0; i < Model.Count; i++)
    {
        if (i > 0 && i % 2 == 0)
        {
            @:</div><div class="row"> // close and start new row
        }
        <div class="col-xs-6">
            @Html.TextBoxFor(o => o[i].Value)
        </div>
    }
</div>

@for(int i=0;i0&&i%2==0)
{
@://关闭并开始新行
}
@Html.TextBoxFor(o=>o[i].Value)
}

使用此处找到的split方法的组合(我将其转换为helper方法)

还有一个for循环,我设法实现了带有索引项的网格

public static class SplitListHelper
{        
    public static IEnumerable<IEnumerable<T>> Split<T>(this T[] array, int size)
    {
        for (var i = 0; i < (float)array.Length / size; i++)
        {
            yield return array.Skip(i * size).Take(size);
        }
    }
}
公共静态类SplitListHelper
{        
公共静态IEnumerable拆分(此T[]数组,整数大小)
{
对于(变量i=0;i<(浮点)数组。长度/大小;i++)
{
收益返回数组。跳过(i*size)。获取(size);
}
}
}

@if(Model!=null)
{
int rowCount=0;
foreach(Model.ToArray()中的变量行分割(4))
{
@对于(int i=0;iModel[rowCount+i].Name)
@Html.CheckBoxFor(m=>Model[rowCount+i]。选中)
}
行数+=4;
}                       
}

真是太棒了!我从来不知道这个建筑!这确实令人惊讶,显示效果很好,但输出HTML并没有将前两行包装在行DIV中。它只包含后续的每一行。@WillStrohl,是的(不确定您做了哪些不同的操作)
@if (Model != null)
{
    int rowCount = 0;
    foreach (var row in Model.ToArray().Split(4))
    {
        <div class="row">
            @for (int i = 0; i < row.Count(); i++)
            {
                <div class="col-xs-3">
                    @Html.DisplayFor(m => Model[rowCount + i].Name)
                    @Html.CheckBoxFor(m => Model[rowCount + i].Selected)                    
                </div>
            }
        </div>
        rowCount += 4;
    }                       
}