MVC5视图:在循环遍历模型时设置并获取索引

时间:2014-11-04 14:42:22

标签: c# view indexing asp.net-mvc-5 pagedlist

在我看来,我正在尝试设置索引,以便将表格的每一行标记为偶数或奇数。我做了很多搜索并找到了解决方案,但我找到的解决方案是当模型是IEnumerable但我的是PagedList.IPagedList。

Link to the other solution I found

@foreach (var item in Model.Select((x, i) => new { Data = x, Index = i }))
{
   <tr @if ((item.index) % 2 == 0){ <text> class=”even” </text> } else {<text> class=”odd” </text>}>

         <td>@Html.DisplayFor(modelItem => item.thing)</td>
         <td>@Html.DisplayFor(modelItem => item.thing2)</td>
         <td>@Html.DisplayFor(modelItem => item.thing3)</td>
   </tr>
}

我在edditor中收到此错误:

不能将lambda表达式用作动态调度操作的参数,而无需先将其转换为委托或表达式树类型。

如果我运行它会出现此错误:

&#39; AnonymousType#1&#39;不包含&#39; index&#39;的定义没有扩展方法&#39;索引&#39;接受类型为#AnonymousType#1&#39;的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)

有什么想法吗?或者我可以不使用PagedList.IPagedList模型吗?

编辑: 修正了一件事改名为&#34;索引&#34;在每个to&#34;索引&#34;在编辑错误中仍然如此。并且运行错误是说所有这些:

@ Html.DisplayFor(modelItem =&gt; item.thing)

也需要改变

@ Html.DisplayFor(modelItem =&gt; item.data.thing)

这样做之后它会运行,但我没有上课=&#34;偶数或上课&#34;奇数&#34;在标签中。

这可能是一种更简单的整体方式吗?

1 个答案:

答案 0 :(得分:3)

首先,您拼写item.index没有首都I。这解释了你看到的错误。

那就是说,你应该真正使用而不是foreach,而不仅仅是因为你需要一个索引。 MVC中的表达式DisplayFor(modelItem => item.thing)假设lambda的右侧依赖于左侧,如果不是这样,则可能会遇到问题。

由于这一切,我认为你需要一个for循环。幸运的是IPagedList实现了IList<T>,所以这不是什么大问题:

@for (int i = 0; i < Model.Count(); i++)
{
   <tr @if (i % 2 == 0){ <text> class=”even” </text> } else {<text> class=”odd” </text>}>

         <td>@Html.DisplayFor(model => model[i].thing)</td>
         <td>@Html.DisplayFor(model => model[i].thing2)</td>
         <td>@Html.DisplayFor(model => model[i].thing3)</td>
   </tr>
}