core mvc 分页
看了下XPAGE感觉还是用的不太爽,自己写了个,不处理数据,只根据参数生成分页的html代码,样式是bootstrap的,需要的小伙伴拿走吧。
public static IHtmlContent Pager(this IHtmlHelper html, long totalCount, int pageSize, string pageStr)
{
if (totalCount < ) return new HtmlString(string.Empty); var totalPages = (int)Math.Ceiling(totalCount / (double)pageSize); //总页数 var dicRoute = html.ViewContext.RouteData.Values;
var strQuery = html.ViewContext.HttpContext.Request.Query;
int pageIndex;
if (dicRoute.ContainsKey(pageStr))
{
if (!int.TryParse(dicRoute[pageStr].ToString(), out pageIndex)) pageIndex = ;
}
else
{
if (!int.TryParse(strQuery[pageStr].ToString(), out pageIndex)) pageIndex = ;
} if (pageIndex < ) pageIndex = ;
if (pageIndex > totalPages) pageIndex = totalPages; foreach (var key in dicRoute.Keys)
{
if (string.IsNullOrEmpty(key) || !strQuery.ContainsKey(key)) continue;
if (!strQuery.TryGetValue(key, out var values)) continue;
if (values.Count == && !string.IsNullOrEmpty(values))
{
dicRoute[key] = strQuery[key];
}
} var sbOut = new StringBuilder();
sbOut.Append("<nav aria-label=\"Page navigation\">");
sbOut.Append("<ul class=\"pagination\">");
if (totalPages > )
{
sbOut.Append("<li");
sbOut.Append(pageIndex == ? " class=\"disabled\">" : ">");
dicRoute[pageStr] = ;
sbOut.Append(pageIndex == ? "<a>首页</a>" : GetString(html.RouteLink("首页", dicRoute)));
sbOut.Append("</li>"); var pre = pageIndex - ;
if (pre < ) pre = ;
sbOut.Append("<li");
sbOut.Append(pageIndex == ? " class=\"disabled\">" : ">");
dicRoute[pageStr] = pre;
sbOut.Append(pageIndex == ? "<a>上一页</a>" : GetString(html.RouteLink("上一页", dicRoute)));
sbOut.Append("</li>"); var nex = pageIndex + ;
if (nex > totalPages) nex = totalPages;
sbOut.Append("<li");
sbOut.Append(pageIndex == totalPages ? " class=\"disabled\">" : ">");
dicRoute[pageStr] = nex;
sbOut.Append(pageIndex == totalPages ? "<a>下一页</a>" : GetString(html.RouteLink("下一页", dicRoute)));
sbOut.Append("</li>"); sbOut.Append("<li");
sbOut.Append(pageIndex == totalPages ? " class=\"disabled\">" : ">");
dicRoute[pageStr] = totalPages;
sbOut.Append(pageIndex == totalPages ? "<a>尾页</a>" : GetString(html.RouteLink("尾页", dicRoute)));
sbOut.Append("</li>");
} sbOut.AppendFormat("<li><a>共{0}条数据</a></li>", totalCount); sbOut.Append("</ul>");
sbOut.Append("</nav>"); return new HtmlString(sbOut.ToString()); }
说明下,totalCount是总条数,pageSize是每页条数,pageStr是页参数的 key 如:http://123.com/?page=4 pageStr就是 page
使用如下
@Html.Pager(, , "page")
以上代码中的 GetString 方法请阅读第一篇文章
core mvc 分页的更多相关文章
- 再谈使用X.PagedList.Mvc 分页(ASP.NET Core 2.1)
在以前的博文中写过使用X.PagedList.Mvc组件来对ASP.NET MVC应用程序进行分页,可以参考此篇随笔:Asp.net MVC 使用PagedList(新的已更名 为X.PagedLis ...
- 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-1
来个目录吧: 第一章 第二章 第三章 暂时就这么多.后面路线更新吧 本系列文章为翻译加上我个人的使用心得理解,希望帮助热爱学习的程序员. 珍重声明:本系列文章会跟原文有点出入,去掉了罗里吧嗦的文字. ...
- 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-4
来个目录吧: 第一章-入门 第二章- Entity Framework Core Nuget包管理 第三章-创建.修改.删除.查询 第四章-排序.过滤.分页.分组 第五章-迁移,EF Core 的co ...
- ASP.NET Core MVC中构建Web API
在ASP.NET CORE MVC中,Web API是其中一个功能子集,可以直接使用MVC的特性及路由等功能. 在成功构建 ASP.NET CORE MVC项目之后,选中解决方案,先填加一个API的文 ...
- 使用 ASP.NET Core MVC 创建 Web API(一)
从今天开始来学习如何在 ASP.NET Core 中构建 Web API 以及每项功能的最佳适用场景.关于此次示例的数据库创建请参考<学习ASP.NET Core Razor 编程系列一> ...
- 在Asp.Net Core MVC 开发过程中遇到的问题
1. Q: Razor视图中怎么添加全局模型验证消息 #### A:使用ModelOnly <div asp-validation-summary="ModelOnly" c ...
- ASP.NET Core MVC/WebAPi 模型绑定探索
前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...
- .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整-控制反转和依赖注入的使用
再次调整项目架构是因为和群友dezhou的一次聊天,我原来的想法是项目尽量做简单点别搞太复杂了,仅使用了DbContext的注入,其他的也没有写接口耦合度很高.和dezhou聊过之后我仔细考虑了一下, ...
- .Net Core MVC 网站开发(Ninesky) 2.2、栏目管理功能-System区域添加
在asp或asp.net中为了方便网站的结构清晰,通常把具有类似功能的页面放到一个文件夹中,用户管理功能都放在Admin文件夹下,用户功能都放在Member文件夹下,在MVC中,通常使用区域(Area ...
随机推荐
- Linux Shell高级技巧(目录)
为了方便我们每个人的学习,这里将给出Linux Shell高级技巧五篇系列博客的目录以供大家在需要时参阅和查找. Linux Shell高级技巧(一) http://www.cnblogs.com/s ...
- zabbix忘记登录密码重置方法
1.忘记zabbix之后,先用mysql查看一下: [root@centos7-106 ~]# mysql -uroot -p -e "select * from zabbix.users\ ...
- java使用new Date()和System.currentTimeMillis()获取当前时间戳(转载)
转自:http://www.cnblogs.com/wuchen/archive/2012/06/30/2570746.html 在开发过程中,通常很多人都习惯使用new Date()来获取当前时间, ...
- 洛谷 - P1198 - 最大数 - 线段树
https://www.luogu.org/problemnew/show/P1198 要问区间最大值,肯定是要用线段树的,不能用树状数组.(因为没有逆元?但是题目求的是最后一段,可以改成类似前缀和啊 ...
- R Factor 如何转为c()
从 R语言本身来说 > f [1] 130015.IB 130013.IB Levels: 130013.IB 130015.IB > data = c(f) > data [1] ...
- Jquery禁用网页右键菜单
$(function(){ $(document).bind("contextmenu",function(e){ return false; }); });
- Ascall码的故事
没事发个ascall码表,二进制值得研究呦 sub al,30h; and al,00001111b ;字符ascall转数字or al,00110000b; sub al,32; and al,11 ...
- C# BitmapData和Marshal.Copy()用法
C# BitmapData和Marshal.Copy()用法 //此函数用法例子如下: public static byte[] GetGrayArray(Bitmap srcBmp, Rectang ...
- Codeforces Round #261 (Div. 2) C
Description Recently Pashmak has been employed in a transportation company. The company has kbuses a ...
- Math Show CodeForces - 846B
题目 题意: 有n个任务,每个任务有k个子任务,有m的时间来完成任务.每个任务的第i个子任务需要时间都是ti.完成一个子任务获得一分,完成一个大任务的所有子任务额外得一分.问如何在时间不超过m的情况下 ...