.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控件,那么自己手工写一个分页控件就很有必要了,当然,最重要的是通用性 ...
随机推荐
- iOS程序执行顺序 AppDelegate及 UIViewController 的生命周期
iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 iOS应用程序的状态切换很重要,而UIViewControler对于iOS这种MVC模式来说尤为重要 ...
- java 23种设计模式 深入浅出
以下内容只作为对自己对知识进行总结,如有引用他人文章会在文段末尾表明出处: Java的23种设计模式 23种设计模式总共可以分为三大类,进行不定期更新总结,将逐步展开介绍自己对设计模式的理解,多多指教 ...
- Fire Net HDU - 1045(二分匹配)
把每一列中相邻的 . 缩为一个点 作为二分图的左边 把每一行中相邻的 . 缩为一个点 作为二分图的右边 然后求最大匹配即可 这题用匈牙利足够了...然而..我用了hk...有点大材小用的感觉// ...
- 使用System.getProperty方法,如何配置JVM系统属性
原创文章,欢迎转载,转载请注明出处! 很多时候我们需要在项目中读取外部属性文件,用到了System.getProperty("")方法.这个方法需要配置JVM系统属性,那么如何配置 ...
- MT【99】2005联赛二试题我的一行解法
为表示尊敬先展示参考答案:参考答案其实很好的体现了当年出题人陶平生的想法,就是利用已知形式联想到三角里的射影定理,从而写出余弦定理形式,利用三角解题,如下: 这里展示以下几年前做这题时我的解法: $\ ...
- 【转】单片机系统中数字滤波的算法【C程序整理】
随机误差是有随机干搅引起的,其特点是在相同条件下测量同一个量时,其大小和符号做无规则变化而无法预测,但多次测量结果符合统计规律.为克服随机干搅引入的误差,硬件上可采用滤波技术,软件上可以采用软件算法实 ...
- 960CSS框架,之前有用过 了解下框架基本原理
http://blog.sina.com.cn/s/blog_8173443e010160b8.html CSS框架已经出现很长时间了,关于这些框架的用处也被我们讨论了很多遍了.有人说,CSS框架不够 ...
- E. The Supersonic Rocket Codeforces Round #502 (in memory of Leopoldo Taravilse, Div. 1 + Div. 2)
http://codeforces.com/contest/1017/problem/E 凸包模板+kmp #include <cstdio> #include <cstdlib&g ...
- 什么是spu和sku
电商概念SPU与SKU SPU = Standard Product Unit (标准产品单位)SPU是商品信息聚合的最小单位,是一组可复用.易检索的标准化信息的集合,该集合描述了一个产品的特性.通俗 ...
- 短视频如何制作?如何下载短视频?常用的短视频录制和剪辑App有哪些?
当下,娱乐圈最火的是什么?当然是短视频了. 那么,短视频如何制作?短视频如何挣钱?如何下载免费短视频呢?这篇文章就收录了一些相关的短视频文章,加入收藏哦,小编会持续更新本文. 1. iPhone手机上 ...