看了下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 方法请阅读第一篇文章

网络释义
totalcount: 总记录
TotalCount Integer: 伸缩规则总数
TotalCount String: 列表条条目数
pager  ['peɪdʒə]  pager&type=1详细X
基本翻译
n. 寻呼机,呼机
n. (Pager)人名;(德)帕格
网络释义
pager: 传呼机
Cowhide Pager: 牛皮纸
numeric pager: 数字寻呼机

core mvc 分页的更多相关文章

  1. 再谈使用X.PagedList.Mvc 分页(ASP.NET Core 2.1)

    在以前的博文中写过使用X.PagedList.Mvc组件来对ASP.NET MVC应用程序进行分页,可以参考此篇随笔:Asp.net MVC 使用PagedList(新的已更名 为X.PagedLis ...

  2. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-1

    来个目录吧: 第一章 第二章 第三章 暂时就这么多.后面路线更新吧 本系列文章为翻译加上我个人的使用心得理解,希望帮助热爱学习的程序员. 珍重声明:本系列文章会跟原文有点出入,去掉了罗里吧嗦的文字. ...

  3. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-4

    来个目录吧: 第一章-入门 第二章- Entity Framework Core Nuget包管理 第三章-创建.修改.删除.查询 第四章-排序.过滤.分页.分组 第五章-迁移,EF Core 的co ...

  4. ASP.NET Core MVC中构建Web API

    在ASP.NET CORE MVC中,Web API是其中一个功能子集,可以直接使用MVC的特性及路由等功能. 在成功构建 ASP.NET CORE MVC项目之后,选中解决方案,先填加一个API的文 ...

  5. 使用 ASP.NET Core MVC 创建 Web API(一)

    从今天开始来学习如何在 ASP.NET Core 中构建 Web API 以及每项功能的最佳适用场景.关于此次示例的数据库创建请参考<学习ASP.NET Core Razor 编程系列一> ...

  6. 在Asp.Net Core MVC 开发过程中遇到的问题

    1. Q: Razor视图中怎么添加全局模型验证消息 #### A:使用ModelOnly <div asp-validation-summary="ModelOnly" c ...

  7. ASP.NET Core MVC/WebAPi 模型绑定探索

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

  8. .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整-控制反转和依赖注入的使用

    再次调整项目架构是因为和群友dezhou的一次聊天,我原来的想法是项目尽量做简单点别搞太复杂了,仅使用了DbContext的注入,其他的也没有写接口耦合度很高.和dezhou聊过之后我仔细考虑了一下, ...

  9. .Net Core MVC 网站开发(Ninesky) 2.2、栏目管理功能-System区域添加

    在asp或asp.net中为了方便网站的结构清晰,通常把具有类似功能的页面放到一个文件夹中,用户管理功能都放在Admin文件夹下,用户功能都放在Member文件夹下,在MVC中,通常使用区域(Area ...

随机推荐

  1. Linux Shell高级技巧(目录)

    为了方便我们每个人的学习,这里将给出Linux Shell高级技巧五篇系列博客的目录以供大家在需要时参阅和查找. Linux Shell高级技巧(一) http://www.cnblogs.com/s ...

  2. zabbix忘记登录密码重置方法

    1.忘记zabbix之后,先用mysql查看一下: [root@centos7-106 ~]# mysql -uroot -p -e "select * from zabbix.users\ ...

  3. java使用new Date()和System.currentTimeMillis()获取当前时间戳(转载)

    转自:http://www.cnblogs.com/wuchen/archive/2012/06/30/2570746.html 在开发过程中,通常很多人都习惯使用new Date()来获取当前时间, ...

  4. 洛谷 - P1198 - 最大数 - 线段树

    https://www.luogu.org/problemnew/show/P1198 要问区间最大值,肯定是要用线段树的,不能用树状数组.(因为没有逆元?但是题目求的是最后一段,可以改成类似前缀和啊 ...

  5. R Factor 如何转为c()

    从 R语言本身来说 > f [1] 130015.IB 130013.IB Levels: 130013.IB 130015.IB > data = c(f) > data [1] ...

  6. Jquery禁用网页右键菜单

    $(function(){ $(document).bind("contextmenu",function(e){ return false; }); });

  7. Ascall码的故事

    没事发个ascall码表,二进制值得研究呦 sub al,30h; and al,00001111b ;字符ascall转数字or al,00110000b; sub al,32; and al,11 ...

  8. C# BitmapData和Marshal.Copy()用法

    C# BitmapData和Marshal.Copy()用法 //此函数用法例子如下: public static byte[] GetGrayArray(Bitmap srcBmp, Rectang ...

  9. Codeforces Round #261 (Div. 2) C

    Description Recently Pashmak has been employed in a transportation company. The company has kbuses a ...

  10. Math Show CodeForces - 846B

    题目 题意: 有n个任务,每个任务有k个子任务,有m的时间来完成任务.每个任务的第i个子任务需要时间都是ti.完成一个子任务获得一分,完成一个大任务的所有子任务额外得一分.问如何在时间不超过m的情况下 ...