.NetCore 中如何实现分页以及编写一个URL分页

首先看下效果

这个分页控件不是很完美,体现下思路就行了,有兴趣的可以自己完善,我把代码贴出来,在这边文章中已有一些介绍

代码

 public class UosoPagerTagHelper : TagHelper
    {
        public UosoPagerOption UosoPagerOption { get; set; }

        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            output.TagName = "div";
            if (UosoPagerOption.CountNum < 1)
            {
                UosoPagerOption.CountNum = 5;
            }
            if (UosoPagerOption.PageIndex < 1)
            {
                UosoPagerOption.PageIndex = 1;
            }
            if (UosoPagerOption.PageIndex > UosoPagerOption.TotalPage)
            {
                UosoPagerOption.PageIndex = UosoPagerOption.TotalPage;
            }
            if (UosoPagerOption.TotalPage < 1)
            {
                return;
            }
            var queryarr = UosoPagerOption.Query.Where(c => c.Key != "pageindex" && c.Key != "pagesize").ToList();
            string queryurl = string.Empty;
            foreach (var item in queryarr)
            {
                queryurl += "&" + item.Key + "=" + item.Value;
            }

            output.Content.AppendFormat("<a class=\"prev\" href=\"{0}?pageindex={1}&pagesize={2}{3}\">首页</a>", UosoPagerOption.Url, 1, UosoPagerOption.PageSize, queryurl);
            if (UosoPagerOption.PageIndex == 1)
            {
                output.Content.AppendFormat("<a class=\"prev\" href=\"{0}?pageindex={1}&pagesize={2}{3}\">上一页</a>", UosoPagerOption.Url, 1, UosoPagerOption.PageSize, queryurl);
            }
            else {
                output.Content.AppendFormat("<a class=\"prev\" href=\"{0}?pageindex={1}&pagesize={2}{3}\">上一页</a>", UosoPagerOption.Url, UosoPagerOption.PageIndex - 1, UosoPagerOption.PageSize, queryurl);

            }

            #region 分页逻辑
            if (UosoPagerOption.PageIndex == 1)
            {
                for (int i = UosoPagerOption.PageIndex; i <= UosoPagerOption.PageIndex + UosoPagerOption.CountNum - 1; i++)
                {
                    if (i <= UosoPagerOption.TotalPage)
                    {
                        if (UosoPagerOption.PageIndex == i)
                        {
                            output.Content.AppendFormat("<span class=\"current\">{0}</span>", i);
                        }
                        else
                        {
                            output.Content.AppendFormat("<a class=\"num\" href=\"{0}?pageindex={1}&pagesize={2}{3}\">{1}</a>", UosoPagerOption.Url, i, UosoPagerOption.PageSize, queryurl);

                        }
                    }
                }
            }

            else if (UosoPagerOption.PageIndex % UosoPagerOption.CountNum == 0)
            {

                for (int i = UosoPagerOption.PageIndex - (UosoPagerOption.CountNum / 2); i <= UosoPagerOption.PageIndex + UosoPagerOption.CountNum / 2; i++)
                {
                    if (i <= UosoPagerOption.TotalPage)
                    {
                        if (UosoPagerOption.PageIndex == i)
                        {
                            output.Content.AppendFormat("<span class=\"current\">{0}</span>", i);
                        }
                        else
                        {
                            output.Content.AppendFormat("<a class=\"num\" href=\"{0}?pageindex={1}&pagesize={2}{3}\">{1}</a>", UosoPagerOption.Url, i, UosoPagerOption.PageSize, queryurl);

                        }
                    }
                }
            }
            else
            {

                int startindex = UosoPagerOption.CountNum * (UosoPagerOption.PageIndex / UosoPagerOption.CountNum) + 1;
                for (int i = startindex; i <= startindex + UosoPagerOption.CountNum - 1; i++)
                {
                    if (i <= UosoPagerOption.TotalPage)
                    {
                        if (UosoPagerOption.PageIndex == i)
                        {
                            output.Content.AppendFormat("<span class=\"current\">{0}</span>", i);
                        }
                        else
                        {
                            output.Content.AppendFormat("<a class=\"num\" href=\"{0}?pageindex={1}&pagesize={2}{3}\">{1}</a>", UosoPagerOption.Url, i, UosoPagerOption.PageSize, queryurl);

                        }
                    }
                }

            }

            #endregion
            if (UosoPagerOption.PageIndex == UosoPagerOption.TotalPage)
            {
                output.Content.AppendFormat("<a class=\"next\" href=\"{0}?pageindex={1}&pagesize={2}{3}\">下一页</a>", UosoPagerOption.Url, UosoPagerOption.TotalPage, UosoPagerOption.PageSize, queryurl);
            }
            else
            {
                output.Content.AppendFormat("<a class=\"next\" href=\"{0}?pageindex={1}&pagesize={2}{3}\">下一页</a>", UosoPagerOption.Url, UosoPagerOption.PageIndex + 1, UosoPagerOption.PageSize, queryurl);
            }
            output.Content.AppendFormat("<a class=\"next\" href=\"{0}?pageindex={1}&pagesize={2}{3}\">尾页</a>", UosoPagerOption.Url, UosoPagerOption.TotalPage, UosoPagerOption.PageSize, queryurl);

            output.Content.AppendHtml("<div class=\"checkPageSize layui-form\">" +
                "<select name=\"pageIndexSelect\" lay-filter=\"pageSelect\" lay-verify=\"required\" class=\"pageIndexSelect\" >" +
                "<option value=\"5\" selected=\"selected\">每页5条记录</option >" +
                "<option value=\"10\" >每页10条记录</option>" +
                "<option value=\"20\" > 每页20条记录</option>" +
                "<option value=\"50\" > 每页50条记录</option>" +
                "<option value= \"100\"> 每页100条记录</option>" +
                "</select></div>");

            output.Content.AppendHtml("<label>跳转至&nbsp;&nbsp;</label><input type=\"number\" autocomplete=\"of\" placeholder=\"只能输入数字\" id=\"goToPageIndex\"/><label>&nbsp;&nbsp;页&nbsp;&nbsp;</label><input type=\"button\" class=\"btn-default\" value=\"确定\" id=\"goBtn\"/> ");

           base.Process(context, output);
        }
    }

UosoPagerTagHelper

   public class UosoPagerOption
    {
        public int PageIndex { get; set; }
        public int PageSize { get; set; }

        public int CountNum { get; set; }
        public int ItemCount { get; set; }
        public int TotalPage
        {
            get
            {
                return ItemCount % PageSize > 0 ? (ItemCount / PageSize + 1) : ItemCount / PageSize;
            }
        }
        public string Url { get; set; }

        public IQueryCollection Query { get; set; }
    }

UosoPagerOption

用法

1、首先在自己项目中添加对应namespace 可以加到_ViewImports.cshtml中

@addTagHelper namespace.UosoPagerTagHelper, namespace

2、在Action 中列表代码中添加

 ViewBag.Option = new UosoPagerOption()
            {
                ItemCount = 数据总条数,
                PageSize = 每页显示多少条,
                PageIndex = 当前第几页,
                CountNum = 页码显示个数,
                Url = Request.Path.Value,
                Query = Request.Query
            };

3、在页面上我们添加

 <uoso-pager uoso-pager-option="@ViewBag.Option"></uoso-pager>

4、添加JS引用,这里可以根据自己的需求来写,我贴下,这里前端是用LayUI处理

layui.use(‘form‘, function () {
    //各种基于事件的操作,下面会有进一步介绍
    var form = layui.form;
    var url = "";
    form.on(‘select(pageSelect)‘, function (data) {
        url = document.location.pathname.toString();
        url = url + "?pageindex=1&pagesize=" + data.value;
        url = decodeURIComponent(url);
        window.location.href = url;
    });
    var pagesize = GetQueryString("pagesize");
    if (pagesize != null) {
        $("select[name=‘pageIndexSelect‘]").val(pagesize);
        form.render(‘select‘);
    }
    $("input[id=‘goToPageIndex‘]").keypress(function () {
        return (/[\d]/.test(String.fromCharCode(event.keyCode)));
    });
    $("#goBtn").click(function () {
        var pageIndex = $("#goToPageIndex").val();
        if (pageIndex == null || pageIndex.toString() == ‘‘ || pageIndex == undefined) {
            layer.msg(‘页数不能为空‘);
            pageIndex = 0;
        } else if (pageIndex < 1) {
            layer.msg(‘页数不能小于1‘)
            pageIndex = 1;
        } else {
            url = document.location.pathname.toString();
            url = url + "?pageindex=" + pageIndex + "&pagesize=" + pagesize;
            window.location.href = url;
        }

    })
});
function GetQueryString(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return unescape(r[2]); return null;
}

大概的思路就是这样子,代码仅供参考~

原文地址:https://www.cnblogs.com/liyouming/p/9586012.html

时间: 2024-08-08 04:26:25

.NetCore 中如何实现分页以及编写一个URL分页的相关文章

【前端小小白的学习之路】----&gt;用JS编写一个函数,返回数组中重复出现过的元素

用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: var arr = [1, 2, 3, 1, 2, 3, 4, 5]; var getRepeat = function (arr) { var obj = {}; for (var i = 0, len = arr.length; i < len; i++) { if (obj[arr[i]] == undefined) { obj[arr[i]] = 1; } else { obj[arr[i]]++; } } for (var

Java基础-接口中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产。请编写一个java应用程序描述上述的体制现象。 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,

36.中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产.请编写一个java应用程序描述上述的体制现象. 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,该抽象类中有个“安 全生产”的抽象方法:abstract void safetyInProduction() (

c语言中如何设计和编写一个应用系统?

C程序中,如何设计和编写一个应用系统? 一. C语言文件的操作 1. 文件操作的基本方法: C语言将计算机的输入输出设备都看作是文件.例如,键盘文件.屏幕文件等. 向屏幕输出一个信息,例如"Hello"是 #include.h> int main() { printf("Hello\\n"); } 从键盘接收一个字符串然后显示是 #include.h> int main() { char a[10]; scanf("%s",&

【c语言】编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。

/*编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列. 要求:不能使用C函数库中的字符串操作函数.*/ #include <stdio.h> #include <assert.h> void reverse_string(char const * string) { assert( string != NULL ); if( *string != '\0' ) { string++; reverse_string

给定两个32位的整数N和M,以及表示比特位置的i和j。编写一个方法,将M插入到N中, * 使得M从N的第j位开始,到第i位结束

1 /* 2 * 给定两个32位的整数N和M,以及表示比特位置的i和j.编写一个方法,将M插入到N中, 3 * 使得M从N的第j位开始,到第i位结束,假定从j位到i位足以容纳M,也即是M=10011 4 * 那么j和i之间至少可以容纳5个数,假如,不可能出现j=3,i=2的情况,因为第三位和第二位之间放不下M 5 * 例如 6 * N=1000000000(1024) 7 * M=10011(19) 8 * i=2,j=6,输出10001001100 9 * 思路如下: 10 * 1.将N中的从

编写函数,以读模式打开一个文件,将其内容读入到一个string的vector中,将每一行作为一个对立的元素存于vector中

#include<iostream> #include<string> #include<vector> #include<fstream> using namespace std; int main(int argc,char *argv[]) { ifstream input(argv[1]); vector<string> vec; string tmp; while(getline(input,tmp)) { vec.push_back(

编写一个函数char_contains(char str[],char c), 如果字符串str中包含字符c则返回数值1,否则返回数值0

/* 编写一个函数char_contains(char str[],char c), 如果字符串str中包含字符c则返回数值1,否则返回数值0 */ #include <string.h> #include <stdio.h> // 可读性 -> 性能 -> 精简(重构) int char_contains(char str[], char c); int main() { //int result = char_contains("itc8ast"

编写一个过程将查询的字段和where条件中的字符串值动态调用

以scott用户中的emp表为例,编写一个存储过程查询emp表中某个字段的值,但是要查哪个字段是不确定的,where条件中传入的字符串也是不确定的. DECLARE v_a VARCHAR2(20) := 'sal'; v_sql VARCHAR2(200); TYPE tab_org_name IS TABLE OF VARCHAR2(50); v_org_name_tab tab_org_name; BEGIN v_sql := 'SELECT '|| v_a ||' FROM emp';

编写一个函数将参数字符串中的字符反向排列

编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列. 要求:不能使用C函数库中的字符串操作函数. 注意:将参数字符串中的字符反向排列,不是反向输出. 代码如下: #include<stdio.h> #include<stdlib.h> #include<assert.h> int my_strlen(char *str)//求字符串长度 { int count=0; while(*str++) { co