You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为ASP.NET MVC Web应用实现分页展示功能?

ASP.NET MVC 分页功能实现方案

嘿,我来帮你搞定ASP.NET MVC的分页功能!其实这个操作并不复杂,咱们一步步来:

一、用第三方包快速实现(推荐)

最省事的方式是用PagedList这个NuGet包,它已经封装好了分页的核心逻辑,咱们直接用就行:

  1. 安装NuGet包
    打开NuGet包管理器控制台,运行下面的命令:

    Install-Package PagedList.Mvc
    
  2. 修改控制器代码
    先引入命名空间,然后调整你的List方法,让它支持分页参数:

    using PagedList;
    
    public ActionResult List(int? page)
    {
        // 每页显示的条数,你可以根据需求调整
        int pageSize = 10;
        // 当前页码,默认显示第1页
        int pageNumber = (page ?? 1);
        
        // 用ToPagedList替换原来的ToList(),生成分页后的数据集
        var pagedClasses = db.Classes.ToPagedList(pageNumber, pageSize);
        return View(pagedClasses);
    }
    
  3. 更新视图代码
    首先在视图顶部修改模型声明,把原来的List<YourProject.Models.Class>替换成分页专用的接口:

    @model PagedList.IPagedList<YourProject.Models.Class>
    @using PagedList.Mvc;
    

    原来的遍历展示代码不用改,直接在遍历结束后添加分页导航组件:

    <!-- 分页导航区域 -->
    <div class="pagination-container">
        @Html.PagedListPager(Model, page => Url.Action("List", new { page }), 
            new PagedListRenderOptions { 
                DisplayPageCountAndCurrentLocation = true,
                MaximumPageNumbersToDisplay = 5,
                LinkToFirstPageFormat = "首页",
                LinkToLastPageFormat = "末页"
            })
    </div>
    

    这样会自动生成带页码、首页/末页、上一页/下一页的导航条,还能显示当前页码和总页数,样式也可以自己用CSS调整。

二、手动实现分页(不用第三方包)

如果你不想依赖第三方包,也可以自己手写分页逻辑:

  1. 修改控制器

    public ActionResult List(int? page)
    {
        int pageSize = 10;
        int pageNumber = (page ?? 1);
        
        // 计算跳过的条数,截取当前页的数据
        var classes = db.Classes
                        .Skip((pageNumber - 1) * pageSize)
                        .Take(pageSize)
                        .ToList();
        
        // 把分页必要的参数传给视图,这里用ViewBag临时存储
        ViewBag.TotalItems = db.Classes.Count();
        ViewBag.CurrentPage = pageNumber;
        ViewBag.PageSize = pageSize;
        ViewBag.TotalPages = (int)Math.Ceiling((double)ViewBag.TotalItems / pageSize);
        
        return View(classes);
    }
    
  2. 更新视图
    遍历展示代码保持不变,然后手动生成分页链接:

    <div class="pagination">
        <!-- 上一页按钮 -->
        @if (ViewBag.CurrentPage > 1)
        {
            <a href="@Url.Action("List", new { page = ViewBag.CurrentPage - 1 })" class="page-btn">上一页</a>
        }
        
        <!-- 页码按钮 -->
        @for (int i = 1; i <= ViewBag.TotalPages; i++)
        {
            <a href="@Url.Action("List", new { page = i })" 
               class="@(i == ViewBag.CurrentPage ? "active-page" : "page-btn")">@i</a>
        }
        
        <!-- 下一页按钮 -->
        @if (ViewBag.CurrentPage < ViewBag.TotalPages)
        {
            <a href="@Url.Action("List", new { page = ViewBag.CurrentPage + 1 })" class="page-btn">下一页</a>
        }
    </div>
    

    记得给分页按钮加一些CSS样式,让它看起来更规整美观。

两种方法都能实现分页需求,推荐第一种,省得自己造轮子,而且PagedList还支持很多自定义配置,能省不少事。

内容的提问来源于stack exchange,提问作者jelidens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:55:50