在 MVC 中使用 Razor 语法进行分页 ASP.NET



我正在用EF6 ASP.NET MVC。如何在不从控制器调用任何函数的情况下使用视图中的模型中的项目添加分页?

@model IEnumerable<myApp.Models.myTable>
<tbody>
@foreach(var item in Model){
  <tr>
    <!--here I want to add paging with items from model-->
    <td>@Html.DisplayFor(modelItem=> item.name)</td>
  </tr>
}
</tbody>

由于新的 MVC 项目通常默认包含 jQuery,因此您可以使用 jQuery Datatables。您需要向页面添加一些脚本,并确保可以引用表(通过添加 id(:

<script>
    $(document).ready(function () {
        $('#yourTableId').datatable();
    };
</script>

这是最低限度的。您可以非常轻松地在线找到有关jQuery数据表的信息,以获取更深入的信息。

如果要返回数千条记录,则可能需要考虑返回控制器进行分页,以避免在客户端上占用过多内存。

LINQ 提供了可用于实现分页的扩展:SkipTake

@model IEnumerable<myApp.Models.myTable>
@{
    int pageSize = 20;
    int pageIndex = ViewBag.PageIndex as int? ?? 0;
}
<tbody>
@foreach(var item in Model.Skip(pageSize * pageIndex).Take(pageSize))
{
    <tr>
        <td>@Html.DisplayFor(modelItem=> item.name)</td>
    </tr>
}
</tbody>

但我认为这应该在控制器中完成,而不是在视图中完成,因为数据应该已经从那里的数据库中查询,因此您需要查询每个页面上的所有数据。

最新更新