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

如何在ASP.NET Core MVC异步方法中实现分页功能?

问题分析与修复方案

你的代码存在两个核心问题,导致分页功能失效并出现空白页面:

1. 控制器未正确赋值分页结果

ToPagedList方法不会原地修改原集合,而是返回一个新的分页集合实例。你当前的代码只是调用了方法,但没有将结果赋值回viewModel.StudentCards,导致视图拿到的还是完整的原始集合,分页逻辑根本没生效。另外,异步场景下建议使用异步版本的分页方法避免同步阻塞。

修正后的控制器代码:

public async Task<IActionResult> StudentList(int? page)
{
    StudentCardViewModel viewModel = await _mediator.Send(new GetCardQuery());
    var pageNumber = page ?? 1;
    // 接收分页结果并赋值回ViewModel
    viewModel.StudentCards = await viewModel.StudentCards.ToPagedListAsync(pageNumber, 3);

    return View(viewModel);
}

注意:需要确保你的StudentCardViewModel中StudentCards的类型定义为IPagedList<StudentCard>(而非普通的List<StudentCard>),这样才能接收分页后的集合。

2. 视图中分页Pager调用参数错误

@Html.PagedListPager的第一个参数需要传入分页后的集合实例,而不是ViewModel的类型。同时要引入PagedList的命名空间才能使用分页辅助方法。

修正后的视图代码:

@using School.Application.ViewModels.Student
@using X.PagedList.Mvc.Core // 引入分页命名空间
@model StudentCardViewModel

<div class="Content">
    <div>
        @foreach (var item in Model.StudentCards)
        {
            <div class="item">
                <a class="title" target="_blank" href="@item.RedirectUrl">@item.Header</a>
                <div>@item.ShortDescription</div>
                <div class="readMore"><a target="_blank" href="@item.RedirectUrl">read more<span></span></a></div>
            </div>
        }
    </div>
    <!-- 传入分页后的集合,而非类型 -->
    @Html.PagedListPager(Model.StudentCards, page => Url.Action("StudentList", new { page }))
</div>

额外检查项

  • 确认已正确安装PagedList.Core和PagedList.Core.Mvc NuGet包,版本与你的ASP.NET Core版本兼容。
  • 如果GetCardQuery返回的是大量数据,建议在查询数据库时就进行分页(比如EF Core的Skip和Take),而不是先获取全部数据再内存分页,避免性能问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:35:25