在for循环中选择对象而不是在mvc中使用foreach

时间:2014-03-18 22:57:20

标签: html asp.net-mvc razor

在我的一个视图中,我需要在mvc应用程序中使用for循环而不是foreach。我在访问所需对象时遇到问题

foreach遍历模型中的每个对象

@foreach (var cat in Model)
{
     @cat.Name
} 

我想做同样的事情,但要告诉我想要哪个对象

这很有效:)谢谢你们!

<ul class='kwicks kwicks-vertical'>
@for (float i = 0; i < (float)Model.Count() / 3; i++)
{
    var numObjects = @i * 3;

        <li>
            <ul class='kwicks kwicks-horizontal'>
            @for (int j = 0; j < 3; j++)
            {                    
                if (numObjects == Model.Count())
                {
                    break;
                }
                var element = @Model.ToList();
                <li>@element[(int)numObjects].Name</li>
                numObjects++;
            }
            </ul>
        </li>
}
</ul>

2 个答案:

答案 0 :(得分:1)

你应该使用int作为i

@for(int i = 0; i < Model.Count(); i++)
{
      var element = Model[i];
      <div>@element.Name</div>
}

答案 1 :(得分:0)

我假设你有IEnumerable<T>序列作为模型。因此,要以基于索引的方式访问它,您需要将其转换为列表或数组。 尝试这样的事情:

@{var model = Model.ToList();}
@for(var i = 0; i < Model.Count; i++)
{

      /---- 
            here you can say @Model[i].Name ??
      ----/
}

当然,如果您将模型的类型从IEnumerable<T>更改为支持按索引访问元素的内容(例如T[]List<T>

,那会更好

更新: 关于你的算法:我不会把划分浮点数弄得乱七八糟,并将其重写为:

var i = 0;
foreach(var mod in Model)
{
    if(i % 3 == 0)
    {
        <li>
            <ul class='kwicks kwicks-horizontal'>
    }
    <li>Element  @i</li>

    if(i % 3 == 0)
    {
             </ul>
        </li>
    }
    i++;
}

或者如果你仍然需要&#39;循环我会考虑使用一个声明:

@for(var i = 0; i < Model.Count(); i+=3)