asp.net core下一个简单的分页技术
在做web应用的时候免不了要对数据进行分页,我最近在做asp.net core的开发的时候就遇到了这个需求,现在简单的记录一下:
public class PaginatedList<T>:List<T>
{
/// <summary>
/// 当前页
/// </summary>
public int PageIndex { get; set; }
//总页面数
public int TotalPages { get; set; } public PaginatedList(List<T> items, int count, int pageIndex, int pageSize)
{
PageIndex = pageIndex; TotalPages = (int)Math.Ceiling(count / (decimal)pageSize); this.AddRange(items);
}
/// <summary>
/// 判断是否有上一页
/// </summary>
public bool HasPreViousPage => (PageIndex > );
/// <summary>
/// 判断是否有下一页
/// </summary>
public bool HasNextPage => PageIndex < TotalPages;
/// <summary>
/// 创建分页
/// </summary>
/// <param name="source">实体信息</param>
/// <param name="pageIndex">当前页</param>
/// <param name="pageSize">当前页数据条数</param>
/// <returns></returns>
public static async Task<PaginatedList<T>> CreatepagingAsync(IQueryable<T> source,int pageIndex,int pageSize)
{
//返回实体总条数
var count = await source.CountAsync(); var items = await source.Skip((pageIndex - ) * pageSize).Take(pageSize).ToListAsync(); var dtos=new PaginatedList<T>(items,count,pageIndex,pageSize);
return dtos;
} }
主要的知识点:
①这个类表示一个分页,将与分页有关的内容集成到单个类中,符合单一职责原则
②PageIndex记录当前页,TotalPages记录总的页数,在构造函数执行的时候,会传入必要的参数来初始化这些字段,构造函数的方法签名为(List<T> items, int count, int pageIndex, int pageSize)不难看出,传入的pageindex参数来初始化当前页,这个pageindex参数肯定是由页面来传入的,pageSize是自定义的一个数据,你想让一个页面显示多少条记录,就定义成多少。还有一个List<T>类型的item,由这个传入的参数来确定item的总条数(item.Count()),然后由了总的条数和每页的条数就可以得出总的页数。
③在CreatepagingAsync这个方法中会返回一个构造好的分页类。具体看代码注释
asp.net core下一个简单的分页技术的更多相关文章
- 给 asp.net core 写一个简单的健康检查
给 asp.net core 写一个简单的健康检查 Intro 健康检查可以帮助我们知道应用的当前状态是不是处于良好状态,现在无论是 docker 还是 k8s 还是现在大多数的服务注册发现大多都提供 ...
- asp.net core 实现一个简单的仓储
一直有自己写个框架的想法,但是一直没有行动起来,最近比较闲,正好可以开工了. 现在已经完成了两部分.1.一个简单仓储,实现使用的是ef 2.IOC部分,这里是把内置的ioc替换成了aotofac,这部 ...
- Serilog 是 ASP.NET Core 的一个插件,可以简化日志记录
[翻译] ASP.NET Core 利用 Docker.ElasticSearch.Kibana 来记录日志 原文: Logging with ElasticSearch, Kibana, ASP.N ...
- ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 登录登出 上一章节我们总算完善了注册的功能,而且也添加了一个用户,现 ...
- ASP.NET Core 用户注册 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 用户注册 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 用户注册 上一章节我们终于迁移完了 Identity 的数据,也创建 ...
- ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 迁移数据 上一章节中我们配置了 ...
- ASP.NET Core Identity 配置 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Identity 配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 配置 上一章节我们简单介绍了下 Id ...
- ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 验证特性 上一章节我们简单介绍了 ...
- ASP.NET Core Identity 框架 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Identity 框架 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 框架 前面我们使用了 N 多个章节, ...
随机推荐
- M码小黄衫买家秀=w=
M码小黄衫买家秀=w= 17°的天气穿不了短袖polo..就只能这样强行上图啦~ 因为我一直耿耿于大一面向对象课上拿到的那件XL码小黄衫,长到能穿到膝盖,拍小黄衫全家福时候只能很凄凉的借了件小号的穿, ...
- Java 过一下基础
点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...
- 【Teradata】tdlocaledef修改默认日期配置
如下所有操作需要使用root登录到TD数据库节点操作 1.获取数据库当前默认配置 //使用root登录TD数据库节点 cd /opt/teradata/tdat/tdbms/xx.xx.xx.xx/b ...
- Linux的目录结构--一切从根开始
Linux目录结构的特点 # 举例-linux下面使用光盘 ###.把光盘放入到光驱中 ###.linux中使用光盘 /dev/cdrom [root@oldboyedu- ~]# ll /dev/c ...
- 假设在本地搭一个server和mysql数据库环境,假设使用java来訪问数据库
我们能够使用speedamp来搭一个server环境,能够在http://download.csdn.net/detail/baidu_nod/7630265下载 解压后无需安装直接能够使用.点击Sp ...
- UVA116-Unidirectional TSP(动态规划基础)
Problem UVA116-Unidirectional TSP Accept: 7167 Submit: 56893Time Limit: 3000 mSec Problem Descripti ...
- 在git多分支repo仓库中彻底清除大文件
坑的由来 repo中不小心上传了许多测试生成的data.结果可想而知,原本只有代码的仓库突然间变得无比臃肿(或者是慢慢臃肿),从早期的几十MB,迅速飙升至1G. 到底发生了什么 早些时候我对git的原 ...
- 经典Python进阶文档 真的很棒
https://docs.pythontab.com/interpy/args_kwargs/README/
- WPF ListView点击删除某一行并获取绑定数据
最近在开发WPF程序时遇到一个问题,在gridview中希望实现在每一行最后添加一个删除的按钮,但是发现点击每行的button时只会触发button的点击事件,并没有选中这一行,此时调用list.Se ...
- HashMap 1.8
1.重要参数 和1.7中的相同,不在赘述.变化之处在于table不在是Entry类型而是Node类型,即1.8中拉链法中的节点类型变为Node.但其实结构并没有发生很大的变化,1.8中的HashMap ...