P35 翻页(下)
在框架里面我们怎么实现呢?通常会实现一个自定义的类,这个类是一个泛型类。。这个类通常会包含一些属性。
开始写代码
首先建立泛型类
PagedList加上泛型<T> 继承List,PagedList本身就是一个集合,只不过我们在这个集合的基础之上加了一些分页信息。
当前页和总页数。他们的属性是private 防止在类外面设置。否则他们的值就会被设置成不合理的值。
是否有前一页和后一页
只要是currentPage,也就是当前页大于1,他就有前一页。
是否包含下一页
需要一个构造函数,把这些相关的参数都传进来。
数据的总数Item,数据总数count,当前页pageNumebr。然后每页显示的数据条数据pageSize。
totalPages需要算一下:如果是5除以2.等于2.5那么就显示3页。所以这里使用Math.Ceiling。最后再把double转换成int类型。
最终的是我们要把items添加到List里面,这里使用AddRange就可以了。
我们不支持使用这个构造函数,我们建立一个静态方法
改成异步
这里我们实际上可以把查询表达式queryExpression直接作为参数传入createAsync方法
下面我们就来改下Repository
先来修改接口。
实现类。
方法具体返回的修改。
controller
首先要做的就是生成前一页和后一页的链接。生成这个链接就需要用到URLHelper,它里面有个link方法。link方法就可以生成URI。但是link方法需要知道这个Action的name,所以这里我们需要先给action加上name
建立一个private的方法。ResourceUriType是一个枚举类型。
下面建立这个枚举。在Helpers文件夹下建。
因为是前一页,所以这里要减1
必须带上查询过滤条件,否则下一页的数据就不对了。
后一页
默认当前页
如果有前一页就生成
下一页
所有的元数据先弄出来一个对象吧。new一个匿名类
测试
headers里面数据。
试一下这个链接
这里有个错误把&,不安全的字符转义了
这里转换的时候加上第二个参数
里面配置一个属性
重新测试
复制出来,查询第二页
前一页和上一页的数据也都出来了
结束