Blazor分页推荐服务端实现,通过page和pageSize参数按需获取数据,配合Pagination组件封装页码逻辑;客户端分页仅适用于小数据量,用LINQ切片处理。需注意滚动重置、按钮禁用、输入校验及加载状态。
Blazor 实现分页功能,核心是控制每页显示的数据量 + 当前页码 + 总数据条数,再配合 UI 交互(上一页、下一页、跳转页码等)更新显示内容。服务端分页更常用也更高效,客户端分页适合小数据量快速预览。
从后端 API 按需拉取当前页数据,避免一次性加载大量数据,性能好、内存占用低。
TotalCount、Items)int currentPage = 1;、int pageSize = 10;、List items = new(); 、int totalCount = 0;
HttpClient 调用接口,例如:var result = await http.GetFromJsonAsync>($"/api/products?page={currentPage}&pageSize={pageSize}");
int totalPages = (int)Math.Ceiling((double)totalCount / pageSize);
一次性获取全部数据,在前端按页切片展示,简单但不适用于成百上千条记录。
allItems = await http.GetFromJsonAsync>("/api/products");
items = allItems.Skip((currentPage - 1) * pageSize).Take(pageSize).ToList();
allItems.Count,总页数同上用一个独立的 Pagination.razor 组件封装翻页逻辑,通过 EventCallback 通知父组件页码变化:
[Parameter] public int CurrentPage { get; set; }、[Parameter] public int TotalPages { get; set; }、[Parameter] public EventCallback PageChanged { get; set; }
await PageChanged.InvokeAsync(newPage);
分页不是只改数据显示,几个细节容易踩坑:

JSRuntime.InvokeVoidAsync("scrollTo", 0, 0);
CurrentPage == 1 时禁用;末页/下一页在 CurrentPage == TotalPages 时禁用IsLoading 变量 + Skeleton 或 spinner,提升体验基本上就这些。服务端分页是主流做法,搭配一个干净的 UI 组件,就能稳定支撑各类数据列表场景。