.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 < )
{
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);
if (UosoPagerOption.PageIndex == )
{
output.Content.AppendFormat("<a class=\"prev\" href=\"{0}?pageindex={1}&pagesize={2}{3}\">上一页</a>", UosoPagerOption.Url, , UosoPagerOption.PageSize, queryurl);
}
else {
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
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 + , 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>跳转至 </label><input type=\"number\" autocomplete=\"of\" placeholder=\"只能输入数字\" id=\"goToPageIndex\"/><label> 页 </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 > ? (ItemCount / PageSize + ) : 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;
}
大概的思路就是这样子,代码仅供参考~
.NetCore 中如何实现分页以及编写一个URL分页的更多相关文章
- .NetCore 实现分页控件(URL分页)实战
上一篇文章介绍了分页控件的具体实现方式,接下来我们就来做一个分页控件 后台数据处理就过度的介绍,下面针对URL分页中的下面几点做说明: 1.搜索条件的状态保持 2.点击分页需要带上搜索条件 3.页码的 ...
- MVC 分页1 标准的url分页
一. 将mvcpager ddl 引用到web服务项目中. 二. 在view加入 <%@ Import Namespace="Webdiyer.WebControls.Mvc" ...
- PHP+jQuery 列表分页类 ( 支持 url 分页 / ajax 分页 )
/* ******* 环境:Apache2.2.8 ( 2.2.17 ) + PHP5.2.6 ( 5.3.3 ) + MySQL5.0.51b ( 5.5.8 ) + jQuery-1.8.3.mi ...
- 22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表。然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法showB输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。
22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表.然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法sh ...
- Java基础-接口中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产。请编写一个java应用程序描述上述的体制现象。 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,
36.中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产.请编写一个java应用程序描述上述的体制现象. 要求如下: (1)该应用程序中有一个“党中央”接口 ...
- 简单练习题2编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能
编写Java应用程序.首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”.“取款”和“余额查询”.其次, 编写一个主类,在主类中测试Account类的 ...
- 在ubuntu linux 中编写一个自己的python脚本
在ubuntu linux 中编写一个自己的简单的bash脚本. 实现功能:终端中输入简单的命令(以pmpy为例(play music python),为了区别之前说的bash脚本添加了py后缀),来 ...
- 在ubuntu linux 中编写一个自己的bash脚本
在ubuntu linux 中编写一个自己的简单的bash脚本. 实现功能:终端中输入简单的命令(以pm为例(play music)),来实现音乐的播放.注:本人ununut中安装了audacious ...
- 已知一个字符串S 以及长度为n的字符数组a,编写一个函数,统计a中每个字符在字符串中的出现次数
import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/6 21:04 * @description ...
随机推荐
- BZOJ2753 SCOI2012滑雪与时间胶囊(最小生成树)
首先显然可以把所有能到的点拎出来建个新图,这样第一问也就做好了. 剩下的部分似乎是一个裸的最小树形图.但显然这个东西是没什么学的必要的并且不太能跑过去. 考虑建出来的图有什么性质.可以发现如果没有高度 ...
- MT【167】反复放缩
已知数列$\{a_n\}$满足:$a_1=1,a_{n+1}=a_n+\dfrac{a_n^2}{n(n+1)}$1)证明:对任意$n\in N^+,a_n<5$2)证明:不存在$M\le4$, ...
- 【题解】 [ZJOI2008] 泡泡堂(贪心/二分图/动态规划)
懒得复制,戳我戳我 Solution: 就是有一个贪心策略:(以下假设使\(A\)队分数更高) \(First:\)比较两个分值的最小值,如果\(A\)最小分比\(B\)最小分大就直接比较两个最小的, ...
- C# 获取IIS站点及虚拟目录信息
using System; using System.DirectoryServices; using System.Collections.Generic; using System.Text; n ...
- C#代码连接Oracle数据库一段时间以后[connection lost contact]的问题
最近在使用C#代码连接Oracle数据库,分为两部分,WCF的客户端与服务端.程序启动与运行都没有问题,部署到服务器上后,运行也没有问题.但是第二天再访问的时候,就会抛出下边所示的异常.这是怎么回事? ...
- VirtualBox安装Centos后实现文件夹共享
不同虚拟机中的系统和windows之间实现文件共享方式也不一样,在VMWare虚拟机请参考链接:http://www.cnblogs.com/vincentfu/p/5402666.html 进入主题 ...
- pytho部分命令
python --version查看版本号 pip install XXX 安装模块 pip uninstall XXX 卸载模块
- ORACLE递归查询(适用于ID,PARENTID结构数据表)
Oracle 树操作(select…start with…connect by…prior) oracle树查询的最重要的就是select…start with…connect by…prior语法了 ...
- BZOJ2301:莫比乌斯反演+二维容斥解决GCD范围计数
这个题是刚才刷的第一道反演题的拓展版,加上一个容斥就可以了 #include<cstdio> #include<algorithm> using std::min; ; int ...
- 《Two Dozen Short Lessons in Haskell》(二十四)代数类型
这是<Two Dozen Short Lessons in Haskell>这本书的最后一章,第23章没有习题. 这一章里介绍了Haskell如果自定义一种类型,并且用一个双人博弈游戏为例 ...