MVC5 视图:在模型中循环时设置并获取索引
Posted
技术标签:
【中文标题】MVC5 视图:在模型中循环时设置并获取索引【英文标题】:MVC5 View: Set up and get an index while looping through the model 【发布时间】:2014-12-31 12:12:38 【问题描述】:在我看来,我正在尝试设置一个索引,以便我可以将表格的每一行标记为偶数或奇数。我做了很多搜索并找到了一个解决方案,但我找到的解决方案是当模型是 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>
我在编辑器中收到此错误:
如果不先将 lambda 表达式转换为委托或表达式树类型,则不能将其用作动态分派操作的参数。
如果我运行它会出现这个错误:
“AnonymousType#1”不包含“index”的定义,并且找不到接受“AnonymousType#1”类型的第一个参数的扩展方法“index”(您是否缺少 using 指令或程序集引用? )
有什么想法吗?或者我可以不使用 PagedList.IPagedList 模型吗?
编辑: 修复了一件事 将 for each 中的“索引”重命名为“索引”仍然相同,在编辑器错误中。并且运行错误是说所有这些:
@Html.DisplayFor(modelItem => item.thing)
也需要改变
@Html.DisplayFor(modelItem => item.data.thing)
执行此操作后,它会运行,但我没有在标签中得到 class="even 或 class "odd"。
是否有更简单的整体方法?
【问题讨论】:
你的匿名类型属性是Index
,而你正在寻找index
。我会先解决这个问题
您正在为您的匿名类型设置一个名为Index
的属性,并尝试使用index
访问它。
修复了索引索引的事情。现在看来我必须将 首先,你拼写了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>
【讨论】:
以上是关于MVC5 视图:在模型中循环时设置并获取索引的主要内容,如果未能解决你的问题,请参考以下文章