.NetCore 实现分页控件(URL分页)实战
上一篇文章介绍了分页控件的具体实现方式,接下来我们就来做一个分页控件
后台数据处理就过度的介绍,下面针对URL分页中的下面几点做说明:
1、搜索条件的状态保持
2、点击分页需要带上搜索条件
3、页码的逻辑显示
下面就来实现分页控件
首先按照上一篇文章中 我们建立了一个UosoPagerOption 分页参数类,这里我没有准备太多的参数
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 > ? (ItemCount / PageSize + ) : ItemCount / PageSize;
}
}
public string Url { get; set; } public IQueryCollection Query { get; set; }
}
Query:主要还是用来接收url参数
CountNum:显示的页面个数
PageIndex:当前页
PageSize:每页数据条数
ItemCount:总数据条数
TotalPage:总页数
Url:分页请求的地址
然后我们就是扩展控件了(TagHelper),整理类UosoPagerTagHelper
public class UosoPagerTagHelper : TagHelper
{
public UosoPagerOption UosoPagerOption { get; set; } public override void Process(TagHelperContext context, TagHelperOutput output)
{ output.TagName = "div";
if (UosoPagerOption.CountNum < )
{
UosoPagerOption.CountNum = ;
}
if (UosoPagerOption.PageIndex < )
{
UosoPagerOption.PageIndex = ;
}
if (UosoPagerOption.PageIndex > UosoPagerOption.TotalPage)
{
UosoPagerOption.PageIndex = UosoPagerOption.TotalPage;
}
if (UosoPagerOption.TotalPage <= )
{
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, , UosoPagerOption.PageSize, queryurl);
output.Content.AppendFormat("<a class=\"prev\" href=\"{0}?pageindex={1}&pagesize={2}{3}\">上一页</a>", UosoPagerOption.Url, UosoPagerOption.PageIndex - , UosoPagerOption.PageSize, queryurl); #region 分页逻辑
if (UosoPagerOption.PageIndex == )
{
for (int i = UosoPagerOption.PageIndex; i <= UosoPagerOption.PageIndex + UosoPagerOption.CountNum - ; 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 == )
{
for (int i = UosoPagerOption.PageIndex - (UosoPagerOption.CountNum / ); i <= UosoPagerOption.PageIndex + UosoPagerOption.CountNum / ; 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) + ;
for (int i = startindex; i <= startindex + UosoPagerOption.CountNum - ; 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 //for (int i = 1; i <= UosoPagerOption.TotalPage; i++)
//{ // 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); // } //}
output.Content.AppendFormat("<a class=\"next\" href=\"{0}?pageindex={1}&pagesize={2}{3}\">下一页</a>", UosoPagerOption.Url, UosoPagerOption.PageIndex + , UosoPagerOption.PageSize, queryurl);
output.Content.AppendFormat("<a class=\"next\" href=\"{0}?pageindex={1}&pagesize={2}{3}\">尾页</a>", UosoPagerOption.Url, UosoPagerOption.TotalPage, UosoPagerOption.PageSize, queryurl); base.Process(context, output);
}
}
UosoPagerTagHelper
这里包含了页码的逻辑显示以及参数组装,写好了主要需要导入你的控件引用哦
下面在页面中使用控件

这里没有真实的数据,我在Controller中模拟了分页参数信息
ViewBag.Option = new UosoPagerOption()
{
ItemCount = ,
PageSize = pagesize, //5
PageIndex = pageindex,
CountNum = ,
Url = Request.Path.Value,
Query = Request.Query
};
接下来请求页面看下具体效果

鼠标放在监控下页码的地址链接,可以看到每页5条,第2页的参数

当我们使用查询后搜索下,同时监控页码参数可以看到保留对应的搜索条件

接下里就是搜索条件状态的保持了,解决方案可以写一个js插件处理url参数并赋值到对应的控件(根据key值找到对应的name的控件)
根据这个我们可以继续扩展哦 如分页信息的显示以及 自定义的 GO PageIndex 转到某一页 或者自定义每页显示的PageSize
.NetCore 实现分页控件(URL分页)实战的更多相关文章
- 基于jquery扩展漂亮的分页控件(ajax)
分页控件式大家在熟悉不过的控件,很多情况下都需要使用到分页控件来完成列表数据加载操作,在很多分页控件中有的编写麻烦,有的应用扩展比较复杂,有的分页控件样式比较丑陋,有的分页控件用户体验操作比较简单等等 ...
- asp.net分页控件库
AspNetPager分页控件 AspNetPager分页控件解决了分页中的很多问题,直接采用该控件进行分页处理,会将繁琐的分页工作变得简单化,下面是我如何使用AspNetPager控件进行分页处理的 ...
- uinty3d使用ugui封装一个分页控件
我们在显示数据时有的数据比较多,手机内存有限,我们不可能分配很多的控件来显示这些数据,分页是一个不错的选择.比如玩家交易行.我们现在封装一个自己简单的分页控件来显示玩家交易行. 分页控件的原理其实很简 ...
- .NET基于分页控件实现真分页功能
下面利用分页控件实现分页功能.分页控件下载网址:http://www.webdiyer.com/ 从该网址下载AspNetPager.dll后,在VS2008中在工具箱中,右键 —> 选择项 — ...
- 分页控件layui的使用
$.getJSON( )的使用方法简介 $.getJSON( url [, data ] [, success(data, textStatus, jqXHR) ] ) url是必选参数,表示json ...
- .net core 学习笔记(1)-分页控件的使用
最近有个小项目,用.net core开发练练手,碰到的第一个问题就是分页控件的问题,自己写太费时间,上网查了下,发现有人已经封装好了的,就拿过来用了,分页控件github:https://github ...
- UrlPager免费分页控件2.0版发布!
UrlPager是一个ASP.NET WebForm应用程序中通过url进行分页的分页控件,支持使用url路由来生成自定义的分页url.与AspNetPager不同,UrlPager需.NET Fra ...
- 【干货分享】JPager.Net MVC超好用轻量级分页控件
JPager.Net MVC好用的轻量级分页控件,好用到你无法想象,轻量到你无法想象. JPager.Net MVC好用的轻量级分页控件,实现非常简单,使用也非常简单. JPager.Net M ...
- 纯手写分页控件CSS+JS+SQL
Asp.net中虽然用DataPager配合ListView可以实现分页显示,但是有时候由于开发环境等问题不能用到DataPager控件,那么自己手工写一个分页控件就很有必要了,当然,最重要的是通用性 ...
随机推荐
- hdu6444 Neko's Loop
要想A一道题,你需要正版ide,正版草稿纸,正版键盘,正版双手,但最重要的是正版大脑.(改编自wxf在微积分群的吐槽) 分析一下题意,选的所有数的下标模gcd(n,k)都是同余的,而且是在所有同余的下 ...
- youcompleteme 自动补全
1. 拷贝配置文件 cp ~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py ~/.vim/.ycm_extra_conf.py 2. 修改配 ...
- 自学Zabbix3.5.1-监控项item-key介绍
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix3.5.1-监控项item-key介绍 个人觉得艰难理解,故附上原文档:https ...
- AtCoder Grand Contest 007
AtCoder Grand Contest 007 A - Shik and Stone 翻译 见洛谷 题解 傻逼玩意 #include<cstdio> int n,m,tot;char ...
- CRM 2013发邮件的插件报错Cannot open Sql Encryption Symmetric Key because Symmetric Key password does not exist in Config DB
解决方法: 1. 依次打开Settings->Data management –> Data Encryption 然后在上面红框里填上任意一个key即可.
- 一、spring boot 1.5.4入门(web+freemarker)
1.配置maven文件pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmln ...
- 解题:NOI 2010 超级钢琴
题面 WC时候写的题,补一下 做法比较巧妙:记录每个位置和它当前对应区间的左右端点,做前缀和之后重载一下小于号,用优先队列+ST表维护当前最大值.这样贡献就是区间最大值和端点左边差分一下,可以O(1) ...
- 神奇:java中float,double,int的值比较运算
float x = 302.01f; System.out.println(x == 302.01); //false System.out.println(x == 302.01f); // ...
- maven 整合支付宝,导入alipay-sdk-java包到本地仓库
maven 整合支付宝,导入alipay-sdk-java包到本地仓库 1.环境变量添加: MAVEN_HOME:(maven位置) M2_HOME:(maven位置) PATH:%M2_HOME ...
- Hadoop基础--统计商家id的标签数案例分析
Hadoop基础--统计商家id的标签数案例分析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.项目需求 将“temptags.txt”中的数据进行分析,统计出商家id的评论标 ...