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"
有没有一种更简单的整体方法可以做到这一点?
首先,您拼写的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>
}