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

在ASP.NET Core Razor视图中添加分页时遇数据传递问题

排查C#项目中PaginatedList传递到Razor视图的问题

嘿,我看你跟着官方教程做EF MVC分页,到把PaginatedList数据传给Razor视图这步卡壳了。先把你贴的代码片段补全并格式化(你原来的代码有拼写错误和截断),官方完整的PaginatedList类核心代码应该是这样的:

public class PaginatedList<T> : List<T> {
    public int PageIndex { get; private set; }
    public int TotalPages { get; private set; }

    public PaginatedList(List<T> items, int count, int pageIndex, int pageSize) {
        PageIndex = pageIndex;
        TotalPages = (int)Math.Ceiling(count / (double)pageSize);

        this.AddRange(items);
    }

    public bool HasPreviousPage => PageIndex > 1;
    public bool HasNextPage => PageIndex < TotalPages;

    public static async Task<PaginatedList<T>> CreateAsync(IQueryable<T> source, int pageIndex, int pageSize) {
        var count = await source.CountAsync();
        var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();
        return new PaginatedList<T>(items, count, pageIndex, pageSize);
    }
}

接下来给你列几个最容易踩坑的排查点,按顺序检查:

  • 先确认PaginatedList类的完整性:你贴的代码明显没写完(比如publi...是拼写错误+截断),如果类里缺了PageIndex、TotalPages这些核心属性,或者CreateAsync方法,视图里根本没法用分页逻辑,直接就会报编译错误。先把类补全到和官方一致。

  • 检查控制器传递数据的逻辑:确保你的Action是异步的,并且正确调用CreateAsync方法,最后把PaginatedList实例传给视图,而不是普通的List。举个例子:

    public async Task<IActionResult> Index(int? pageIndex) {
        var pageSize = 3;
        var students = _context.Students.AsQueryable();
        // 这里要确保返回的是PaginatedList实例,不是ToList()后的普通List
        var paginatedStudents = await PaginatedList<Student>.CreateAsync(students, pageIndex ?? 1, pageSize);
        return View(paginatedStudents);
    }
    
  • 核对Razor视图的模型声明:视图顶部必须正确指定模型类型为PaginatedList<你的实体类>,比如:

    @model PaginatedList<ContosoUniversity.Models.Student>
    

    如果写成了@model List<Student>,那视图里访问Model.HasPreviousPage这类分页属性肯定会报错,因为普通List根本没有这些属性。

  • 检查视图里的分页代码语法:比如分页按钮的逻辑要正确调用模型的属性,别拼错名字。比如官方示例里的分页按钮代码:

    @if (Model.HasPreviousPage) {
        <a asp-action="Index" asp-route-pageIndex="@(Model.PageIndex - 1)">Previous</a>
    }
    @for (int i = 1; i <= Model.TotalPages; i++) {
        <a asp-action="Index" asp-route-pageIndex="@i">@i</a>
    }
    @if (Model.HasNextPage) {
        <a asp-action="Index" asp-route-pageIndex="@(Model.PageIndex + 1)">Next</a>
    }
    

    这里要注意PageIndex别写成PageNumber,HasPreviousPage别漏写s之类的拼写错误。

  • 确认命名空间引用:不管是控制器还是视图,都要引用PaginatedList所在的命名空间。比如视图里要加@using 你的项目.Models(如果PaginatedList在这个命名空间下),控制器里也要加对应的using语句,不然会找不到PaginatedList类型。

如果还是有问题,你可以把具体的错误信息(比如编译错误、运行时异常)贴出来,我再帮你定位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:33:07