• PagedListCore的使用


    关于在Core2.0PagedListCore实现分页

    一、引言

      开发中在对大量数据展示的时候,出于对性能的考虑,我们往往是使用分页功能(用户需要那一页我们就返回给他那一页,而不是一次性加载所有的数据)。传统的.Net Framework中我们可以使用名为PagedList包来进行分页功能的实现,而在Core2.0中我们也可以使用PagedListCore来进行分页,今天在这里就为大家演示PagedListCore的使用。

    二、添加NuGet包的引用

      首先在Core2.0的程序中PagedList.Core.Mvc(V1.1.0)。(嗯。。。第一个这Logo图片我喜欢)

     

                                      

    三、数据的封装 (这里使用模拟的假数据)

        public class InitDataFisrt
        {
    
            /// <summary>
            /// 排序按需查询
            /// </summary>
            /// <param name="pageIndex">页号</param>
            /// <param name="pageSize">页的大小</param>
            /// <param name="totalCount">总量</param>
            /// <returns></returns>
            public static List<Student> GetStudents(int pageIndex, int pageSize, ref int totalCount)
            {
                var Students = setStudentList()
                            .OrderByDescending(o => o.ID)
                            .Skip((pageIndex - 1) * pageSize)
                            .Take(pageSize).ToList();
                return Students;
            }
    
            /// <summary>
            /// 初始化数据 50条
            /// </summary>
            private static List<Student> setStudentList()
            {
                List<Student> list = new List<Student>();
                for (int i = 0; i < 50; i++)
                {
                    Student stu = new Student()
                    {
                        Name = $"第{i}个人",
                        Address = $"xx小区第{i}单元",
                        Phone = $"{i}",
                        Sex = "",
                        ClassID = i,
                        ID = i
                    };
                    list.Add(stu);
                }
    
                return list;
            }
        }

    四、编写Home控制器的Index页面

     public class HomeController : Controller
        {
            /// <summary>
            /// 
            /// </summary>
            /// <param name="page">要跳转的页面</param>
            /// <param name="parameterTest1">传多个参数时</param>
            /// <param name="parameterTest2">传多个参数时</param>
            /// <returns></returns>
            public IActionResult Index(int? page,int parameterTest1,int parameterTest2)
            {
                //第一次访问时 返回的一页
                int pageIndex  = page ?? 1;
                int pageSize = 10;
                int totalCount = 0;
    
                //假装是从数据库得到的数据
                List<Student> list = InitDataFisrt.GetStudents(pageIndex, pageSize, ref totalCount);
    
                //将List转换成分页时需要的IpagedList
                IPagedList<Student> pagedList = new StaticPagedList<Student>(list, pageIndex, pageSize,totalCount);
    
                return View(pagedList);
            }
    }

    五、前台的对数据的展示(还没开始处理分页,因为要使用到TagHelpers的需要进行封装)

    @{
        ViewData["Title"] = "Home Page";
    }
    @model PagedList.Core.StaticPagedList<Student>
    
    <div id="myCarousel" class="carousel slide" data-ride="carousel" data-interval="6000">
        <table>
            <thead>
                <tr>
                    <td>编号</td>
                    <td>姓名</td>
                    <td>地址</td>
                    <td>电话</td>
                    <td>性别</td>
                    <td>班级</td>
                </tr>
            </thead>
            <tbody>
                @foreach (var item in Model)
                {
                    <tr>
                        <td>@item.ID</td>
                        <td>@item.Name</td>
                        <td>@item.Address</td>
                        <td>@item.Phone</td>
                        <td>@item.Sex</td>
                        <td>@item.ClassID</td>
                    </tr>
                }
            </tbody>
        </table>
    </div>

    六、封装PagedListCore的TagHelpers(下面是他的官网,开源在GitHub)

    https://github.com/hieudole/PagedList.Core.Mvc

    1、在Views文件下的_ViewImports中添加如下代码:

    @using PagedListCoreTest
    @using PagedListCoreTest.Models
    @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
    @addTagHelper *, PagedList.Core.Mvc
    

    2、再次编写Index.cshtml文件如下:

    @{
        ViewData["Title"] = "Home Page";
        //封装的分页样式  在下一步会提出
        var PagedListRenderOptions = PageListOptions.GetPagedListRenderOptions;
    
    
        //如果有多个参数(parameterTest1,parameterTest2) 除了默认的page
        //如: public IActionResult Index(int? page,int parameterTest1,int parameterTest2)
        //可通过new Dictionary<string,string>
        //Key,Value皆为string => 会通过Key自动匹配后台的参数名
        //用法 见下方代码
        var RouteData = new Dictionary<string, string>();
        RouteData.Add("parameterTest1", "参数一");
        RouteData.Add("parameterTest2", "参数二");
    }
    @model PagedList.Core.StaticPagedList<Student>
    
    <div id="myCarousel" class="carousel slide" data-ride="carousel" data-interval="6000">
        <table>
            <thead>
                <tr>
                    <td>编号</td>
                    <td>姓名</td>
                    <td>地址</td>
                    <td>电话</td>
                    <td>性别</td>
                    <td>班级</td>
                </tr>
            </thead>
            <tbody>
                @foreach (var item in Model)
                {
                    <tr>
                        <td>@item.ID</td>
                        <td>@item.Name</td>
                        <td>@item.Address</td>
                        <td>@item.Phone</td>
                        <td>@item.Sex</td>
                        <td>@item.ClassID</td>
                    </tr>
                }
            </tbody>
        </table>
    
        @*
            options:分页的样式
            asp-controller:控制器名
            asp-action:Action名
            asp-all-route-data:不加该项时 =》会默认添加Page参数
                               如若需要额外传参数
                               通过字典传Dictionary,
                               类型为Dictionary<string, string>
        *@
        <pager list="@Model" options="@PagedListRenderOptions" asp-controller="Home" asp-action="Index" asp-all-route-data="RouteData" />
    </div>

    4、封装options所需要的PagedListRenderOptions类,在Model下添加PageListOptions类 引用using PagedList.Core.Mvc,封装PagedListRenderOptions属性

    更多关于PagedListRenderOptions的配置(GitHub导航)

    using PagedList.Core.Mvc;
    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace PagedListCoreTest.Models
    {
        /// <summary>
        /// 封装的PagedList.MVC.Core样式
        /// </summary>
        public static class PageListOptions
        {
            //获取配置
            public static PagedListRenderOptions GetPagedListRenderOptions
            {
                get{
                    return new PagedListRenderOptions()
                    {
                        //添加省略号,其中不显示所有页码
                        DisplayEllipsesWhenNotShowingAllPageNumbers = true,
                        //Previous的超链接
                        LinkToPreviousPageFormat = "上一页",
                        //Next的超链接
                        LinkToNextPageFormat = "下一页",
                        //如果设置为Always,则渲染指向列表中第一页的超链接。
                //如果设置为IfNeeded,则仅在第一页在分页控件中不可见时呈现超链接
    DisplayLinkToFirstPage = PagedListDisplayMode.IfNeeded, //如果设置为Always,则渲染指向列表中最后一页的超链接。
                //如果设置为IfNeeded,则仅在最后一页在分页控件中不可见时呈现超链接。
    DisplayLinkToLastPage = PagedListDisplayMode.IfNeeded, //如果设置为Always,则渲染指向列表上一页的超链接。
                //如果设置为IfNeeded,则仅当列表中有上一页时才渲染超链接。
    DisplayLinkToPreviousPage = PagedListDisplayMode.Always, //如果设置为Always,则渲染指向列表下一页的超链接。
                //如果设置为IfNeeded,则仅在列表中有下一页时呈现超链接。
    DisplayLinkToNextPage = PagedListDisplayMode.Always, //如果为true,则包含列表中每个页面的超链接。 DisplayLinkToIndividualPages = true, //指定要附加第一个列表项的CSS类。 ClassToApplyToFirstListItemInPager = "previous", //最后一个的样式 ClassToApplyToLastListItemInPager = "next", }; } } } }

    七、最后在Startup.cs的ConfigureServices中注册PagedList.Core.Mvc需要的实例

      //注册PagedList.Core.Mvc需要的实例
                services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();

    八、效果

  • 相关阅读:
    Python Day 72 Django框架 图书管理系统回顾ORM 正向查询、反向查询、跨表查询、Django终端打印SQL语句、ORM十三个必会操作总结
    Python Day 71 Django框架setting源码分析、基于该源码原理实现用户在暴露的setting文件中自定义的配置就使用用户配置的,没配置就是用全局默认的
    Python Day 70 利用Django框架做的一个bbs小项目
    Python Day 69 Django框架、Forms组件、forms组件的钩子函数、form组件前端处理逻辑三种方式、form常用字段及插件、Form所有内置字段、字段校验两种方式
    Python Day 68 Django框架、CBV源码简单理解
    Python Day 67 Dango框架图解(总结)、Wsgiref和uwsgi、前后端传输数据的编码格式、From表单和Ajax方式在前端往后端发送文件、补充一下页面清缓存
    python 学习分享-实战篇简单的ftp
    python 学习分享-面向对象2
    python 学习分享-实战篇选课系统
    python 学习分享-面向对象
  • 原文地址:https://www.cnblogs.com/Innocent-of-Dabber/p/9832332.html
Copyright © 2020-2023  润新知