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

本文关键字:设置 获取 索引 循环 视图 模型 MVC5 | 更新日期: 2023-09-27 18:29:08

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

链接到我找到的其他解决方案

@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表达式强制转换为委托或表达式树类型,则无法将其用作动态调度操作的参数。

如果我运行它,就会出现这个错误:

"AnonymousType#1"不包含"index"的定义,也找不到接受类型为"AnonmyousType#1"的第一个参数的扩展方法"index"(是否缺少using指令或程序集引用?)

有什么想法吗?或者我可以不使用PagedList.IPagedList模型来执行此操作吗?

编辑:修复了一件事将for each中的"Index"重命名为"Index"仍然保持不变,在编辑器中出现错误。运行错误是说所有这些:

@Html.DisplayFor(modelItem=>item.thing)

也需要更改

@Html.DisplayFor(modelItem=>item.data.thing)

完成此操作后,它会运行,但我在标签中没有得到class="even"或class"odd"

有没有一种更简单的整体方法可以做到这一点?

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

首先,您拼写的item.index不带大写I。这就解释了你看到的错误。

也就是说,你真的应该使用for而不是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>
}