如何在ASP.NET Core视图的@foreach循环内获取迭代序号
ASP.NET Core Razor 视图循环获取迭代序号的实现方案
方案1:使用.NET内置LINQ带索引的Select重载(推荐)
这是你要找的内置实现方案,不需要手动维护计数变量,只要是IEnumerable类型的集合都可以使用,原理是用Select扩展方法的重载同时返回元素和对应的下标索引:
@foreach (var (item, index) in l_IEnumerableModUserQuery.Select((item, idx) => (item, idx))) { <tr> <td> @* 下标默认从0开始,需要从1计数的话加1即可 *@ @(index + 1) </td> <td> <a href="#"> @item.Pr_FullName </a> </td> <td>@item.Pr_Email</td> <td>@item.Pr_ContactNo</td> </tr> }
如果你的项目是较低版本不支持元组解构,可以用匿名类型实现:
@foreach (var entry in l_IEnumerableModUserQuery.Select((item, idx) => new { Item = item, Index = idx })) { <tr> <td>@(entry.Index + 1)</td> <td>@entry.Item.Pr_FullName</td> <td>@entry.Item.Pr_Email</td> <td>@entry.Item.Pr_ContactNo</td> </tr> }
方案2:外部定义计数变量(兼容所有版本)
也就是你调研到的传统方案,兼容性最强,适合所有.NET版本:
@{ // 从1开始计数就初始化为1,从0开始就设为0 int iterationIndex = 1; } @foreach (var item in l_IEnumerableModUserQuery) { <tr> <td> @iterationIndex </td> <td> <a href="#"> @item.Pr_FullName </a> </td> <td>@item.Pr_Email</td> <td>@item.Pr_ContactNo</td> </tr> // 每次循环结束计数自增 iterationIndex++; }
方案3:转换为IList用for循环
如果你的集合可以转换为IList类型(如数组、List等),直接用for循环遍历天然带索引,性能最优:
@{ var userList = l_IEnumerableModUserQuery.ToList(); } @for (int i = 0; i < userList.Count; i++) { var item = userList[i]; <tr> <td>@(i + 1)</td> <td> <a href="#"> @item.Pr_FullName </a> </td> <td>@item.Pr_Email</td> <td>@item.Pr_ContactNo</td> </tr> }
内容的提问来源于stack exchange,提问作者Muzammil Ismail
相关产品推荐
相关产品推荐

