.NET 分页帮助类

8 篇文章 1 订阅

一直以来,分页是一个非常常见的需求,以前也用过很多的分页控件,比如AspNetPager,现在自己参照之前用过的,自己写了一个非常简单实用的分页实现方法。
先来看看应用效果:
在这里插入图片描述
在这里插入图片描述
如图,定义了是前10页,那么第11页及以后的用...显示,如果是第11页~20页,隐藏前10页以及20以后的内容。
代码非常简单,也在实际项目中运用了。需要注意的是,分页代码没有参与数据库的数据读取。需要先取出数据来,再设置分页就可以了。

定义分页基本字段

private int _currPageIndex;
private int _pageSize = 25;
private string _prevPageText = "上页";
private string _nextPageText = "下页";
private string _firstPageText = "首页";
private string _lasePageText = "末页";
private bool _showFirstLast = true;
private int _recordCount = 0;
private int _showNum = 10;
private string _class = "pagination";
private bool _ShowMoreButtons = true;
private bool _ShowPageIndex = true;

/// <summary>
/// 上一页文字
/// </summary>
public string PrevPageText
{
    get
    {
        return _prevPageText;
    }
    set
    {
        _prevPageText = value;
    }
}
/// <summary>
/// 下一页文字
/// </summary>
public string NextPageText
{
    get
    {
        return _nextPageText;
    }
    set
    {
        _nextPageText = value;
    }
}
/// <summary>
/// 第一页文字
/// </summary>
public string FirstPageText
{
    get
    {
        return _firstPageText;
    }
    set
    {
        _firstPageText = value;
    }
}
/// <summary>
/// 最后一页文字
/// </summary>
public string LastPageText
{
    get
    {
        return _lasePageText;
    }
    set
    {
        _lasePageText = value;
    }
}
/// <summary>
/// 是否显示第一页和最后一页
/// </summary>
public bool ShowFirstLast
{
    get { return _showFirstLast; }
    set { _showFirstLast = value; }
}
/// <summary>
/// 记录数
/// </summary>
public int RecordCount
{
    get { return _recordCount; }
    set { _recordCount = value; }
}
/// <summary>
/// 页大小
/// </summary>
public int PageSize
{
    get { return _pageSize; }
    set { _pageSize = value; }
}
/// <summary>
/// 分多少页
/// </summary>
public int PageCount
{
    get
    {
        if (RecordCount == 0)
        {
            return 1;
        }
        return (int)Math.Ceiling((double)RecordCount / (double)PageSize);
    }
}
/// <summary>
/// 当前页
/// </summary>
public int CurrentPageIndex
{
    set
    {
        _currPageIndex = value;
        if (_currPageIndex < 1)
        {
            _currPageIndex = 1;
        }
    }
    get
    {

        if (_currPageIndex > PageCount && PageCount > 0)
        {
            _currPageIndex = PageCount;
        }
        if (_currPageIndex < 1)
        {
            _currPageIndex = 1;
        }
        return _currPageIndex;
    }

}
/// <summary>
/// 当前页的URL地址
/// </summary>
public string PageURL { get; set; }
/// <summary>
/// 页导航或页跳转显示链接数
/// </summary>
public int ShowNum
{
    get { return _showNum; }
    set { _showNum = value; }
}
/// <summary>
/// 分页样式
/// </summary>
public string Class
{
    get { return _class; }
    set { _class = value; }
}
/// <summary>
/// 是否在页导航元素中显示更多页按钮。
/// </summary>
public bool ShowMoreButtons
{
    get { return _ShowMoreButtons; }
    set { _ShowMoreButtons = value; }
}
/// <summary>
/// 是否在页导航元素中显示页索引数值按钮。
/// </summary>
public bool ShowPageIndex
{
    get { return _ShowPageIndex; }
    set { _ShowPageIndex = value; }
}

基本字段设置内容比较多,大部分都有默认值了。可以不用管,下面介绍分页方法

分页方法

public string pager()
{
    string pageURL = PageURL;
           

    int totalPageCount = PageCount;//num3 共多少页
    int pageIndex = CurrentPageIndex;//num 当前页码
    int NumericButtonCount = ShowNum;
    string PageControl = string.Empty;
    //显示页导航元素
    string startMoreButtons = string.Empty;
    string endMoreButtons = string.Empty;
    int startIndex = ((CurrentPageIndex - 1) / NumericButtonCount) * NumericButtonCount;
    int endIndex = ((startIndex + NumericButtonCount) > PageCount)
                        ? PageCount
                        : (startIndex + NumericButtonCount);

    if (ShowMoreButtons && startIndex > 0)
    {
        startMoreButtons = $"<li><a href=\"{string.Format(PageURL, startIndex)}\">...</a></li>";
    }
    if (ShowPageIndex)
    {
        for (int i = startIndex + 1; i <= endIndex; i++)
        {
            if (i == pageIndex)
            {
                PageControl = PageControl + string.Format("<li class=\"active\"><span>{0}</span></li>", i.ToString());
            }
            else
            {
                PageControl = PageControl + string.Format("<li><a href=\"{0}\">{1}</a></li>", string.Format(pageURL, i.ToString()), i.ToString());
            }
        }
        PageControl = startMoreButtons + PageControl;
    }
    if (ShowMoreButtons && (totalPageCount > ShowNum) && ((endIndex < PageCount) || (PageCount > endIndex + 1)))
    {
        endMoreButtons = $"<li><a href=\"{string.Format(PageURL, (endIndex + 1))}\">...</a></li>";
    }
    PageControl = PageControl + endMoreButtons;

           

    if (pageIndex != 1)
    {
        PageControl = string.Format("<li><a href=\"{0}\">{1}</a></li>", string.Format(pageURL, (pageIndex - 1).ToString()), PrevPageText) + PageControl;
    }
    else
    {
        PageControl = string.Format("<li class=\"disabled\"><span>{0}</span></li>", PrevPageText) + PageControl;
    }
    if (pageIndex != totalPageCount)
    {
        PageControl = PageControl + string.Format("<li><a href=\"{0}\">{1}</a></li>", string.Format(pageURL, (pageIndex + 1).ToString()), NextPageText);
    }
    else
    {
        PageControl = PageControl + string.Format("<li class=\"disabled\"><span>{0}</span></li>", NextPageText);
    }


    string FirstPage = string.Format("<li><a href=\"{0}\">{1}</a><li>", string.Format(pageURL, "1"), FirstPageText);
    string LastPage = string.Format("<li><a href=\"{0}\" class=\"last\">{1}</a></li>", string.Format(pageURL, totalPageCount.ToString()), LastPageText);

    if (ShowFirstLast)
    {
        PageControl = FirstPage + PageControl;
        PageControl = PageControl + LastPage;
    }
    //完成容器包装
    PageControl = string.Format("<ul{0}>", string.IsNullOrEmpty(Class) ? "" : " class=\"" + Class + "\"") + PageControl + "</ul>";
    pageURL = PageControl;
    return pageURL;
}

代码主要是根据分页数、当前页以及需要显示几页,来计算是否显示更多页的按钮,代码还可以设置是否显示第一页和最后一页,可以设置是否显示更多页按钮。还可以设置上一页,下一页的的文字以及首页和末页的文字。

实际应用

[Route("/news/list?page={pageIndex}")]
public async Task<IActionResult> List(int pageIndex)
{

    PageHelper pager = new PageHelper();
    pager.PageURL = "/news/list?page={0}";
    pager.PageSize = 10;
    pager.CurrentPageIndex = pageIndex;
    pager.Class = "pagination";
    pager.ShowNum = 5;
    pager.ShowFirstLast = true;
    pager.NextPageText = "&gt;";//默认是下一页
    pager.PrevPageText = "&lt;";//默认是上一页
    pager.FirstPageText = "&lt;&lt;";//默认是首页
    pager.LastPageText = "&gt;&gt;";//默认是末页
    pager.ShowFirstLast = false;
    var list = await _article_provider.GetPageListAsync();
    pager.RecordCount = list.count;
    return View(Tuple.Create(list.data, pager));
}

使用Tuple将数据与分页传递到前端,前端需要输出一下分页:

 @model Tuple<List<news>,PageHelper>
 @Html.Raw(Model.Item2.pager())

自己完的一个CSS

自己写了一个前端的css样式。分享给大家作为参考:

.pagination{text-align:center; padding:20px 40px;}
.pagination li{display:inline-block; margin:0 5px;}
.pagination li span,.pagination li a{display:block;background:#fff; height:34px; line-height:34px; padding:0 12px; border:1px #edecec solid;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;-o-user-select: none;user-select: none;}
.pagination li.active span,.pagination li.active a{background:#f7a511; color:#fff; border:1px #f7a511 solid;}
.pagination li.disabled span,.pagination li.disabled a{color:#edecec;}
.pagination li a:hover{background:#f7a511; color:#fff; border:1px #f7a511 solid;}

因为在应用中,给定的css是pagination,所以css定义pagination样式就可以啦!

总结

新建一个类,给类起个名字,把代码贴进去就可以使用了!

点击下方公众号卡片,关注我!一起学习,一起进步!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
再次声明 千万不要把XiaoQi.dll 跟 XiaoQi.XML 给分开 添加的时候 一定要引用 不要直接复制DLL 不然没有方法注释 最强大分分页控件 华丽的分页控件 实用的分页控件 有最新最实用的方法 联系小柒 下面是 AspNetHelp 方法概述 ///Show()弹出对话框 ///重载Show()弹出对话框 并且跳转界面 ///ShowJavascript()执行javascript脚本 ///FileDelete()给出文件虚拟路径删除文件 ///FileSize()获取上传文件大小 ///FileUpload()文件上传 路径upload/ 自动重命名 ///FileDownload()文件下载 调用方法如 FileDownload(Response,Server,文件虚拟路径) ///FileTxtWrite()写入TXT文本 给出要创建Txt 文本的地址 ///FileTxtReader()读取TXT文本 Txt 文本的地址 返回一个数组 每一行为数组里的一个元素 ///StringEncrypt() DES字符串加密中文不可以加密 ///StringDecrypt()DES解密字符串 ///StringMD5Encrypt()MD5加密 ///StringPYChar()单个汉字返回该汉字首字母 ///StringRandom()生成指定位数的随机数 ///StringEdit()给出指定字符串长度多少位后用点显示... ///StringReplaceSpace()替换文本中的空格和换行 ///StringColor()改变字的颜色 ///StringNull()当对象是空的时候 转为空字符串 ///StringConvert()汉字转拼音 ///StringNumber()数字转换中文 ///StringRep()url参数为中文时候转换加密 ///StringRes()url参数为中文时候转换解密 ///ShowWindowForm()弹出新窗口页面 ///ShowFormModalDialog()弹出模式窗口页面 ///SqlGetMaxID()给出表名列名 int型 查询出最大列值+1 适用于主键 ///SqlGetSingle()执行一条计算查询结果语句,返回查询结果(object)。 ///SqlExecute()执行SQL语句,返回影响的记录数 ///SqlRunStr()执行SQL语句,不返回影响的记录数 ///SqlRunReturn()执行SQL语句,并返回第一行第一列结果 ///SqlGetReader()获得SqlDataReader对象 使用完须关闭DataReader,关闭数据库连接 ///SqlGetTable()执行查询语句,返回DataTable ///SqlDataSet()执行查询语句,返回DataSet ///SqlIsCunZai()执行Sql 语句查询是否有数据 如果没有返回假 ///SqlRunProc()执行存储过程 ///DataBindDropDownListDefault()DropDownList控件绑定 带默认选择项 如"请选择" ///DataBindDropDownList()DropDownList控件绑定 不带默认选择项 ///DataBindRadioButtonList()RadioButtonList控件绑定 默认第一个选中 ///DataBindCheckBoxList()CheckBoxList控件绑定 ///ElseIpAddr()调用此方法 返回当前登录的省市IP地址 ///ElseDataTimeIng()返回本地电脑的当前日期的年月日时分秒 动态的显示 JS实现 ///ElsePageLoad()页面加载数据加载完成呈现页面 ///ElseCkeck()返回页面验证码图片 使用方法:单独创建一个页面 在首次加载事件里写 AspNetHelp.ElseCkeck(Page); 在使用验证码的页面直接写 img src="这个页面的路径" 注意验证码保存在 Session["CheckCode"]中 这里是区分大小写的 ///ElseColorRGB()由于QQ截图的取色会出现RGB的颜色 这里能转换成16进制 分页控件详情请看内置文档

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾斜的水瓶座

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值