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 ...
随机推荐
- python中为什么需要使用“if __name__ == '__main__'”语句
首先用最简洁的语言来说明一下 if __name__ == '__main__': 的作用:防止在被其他文件导入时显示多余的程序主体部分. 先举个例子,如果不用 if __name__ == '__m ...
- 聊聊Spring的核心组件
Spring的核心是IOC容器,它本质上是一个bean关系集合.而要实现它也是有beans,context,core三个模块完成的. beans包主要是负责bean的定义,创建和解析工作,里面用到了简 ...
- 解决Excel打开UTF-8编码CSV文件乱码的问题
打开 Excel,执行“数据”->“自文本”,选择 CSV 文件,出现文本导入向导,选择“分隔符号”,下一步,勾选“逗号”,去掉“ Tab 键”,下一步,完成,在“导入数据”对话框里,直接点确定 ...
- SCUT - 240 - 宝华的文件系统 - 模拟
https://scut.online/p/240 就是要小心绝对路径中也有.和..出现. #include<bits/stdc++.h> using namespace std; #de ...
- C++笔试题库之编程、问答题 200~300道
201下面的代码有什么问题?并请给出正确的写法. void DoSomeThing(char* p) { char str[16]; int n; assert(NULL != p); sscanf( ...
- Codeforces Round #436 (Div. 2) E. Fire(背包+记录路径)
传送门 题意 给出n种物品,抢救第\(i\)种物品花费时间\(t_i\),价值\(p_i\),截止时间\(d_i\) 询问抢救的顺序及物品价值和最大值 分析 按\(d_i\)排序的目的是防止以下情况 ...
- web.xml报错:Invalid content was found starting with element 'init-param'
问题与分析 在web.xml中配置servlet节点时报错如下: cvc-complex-type.2.4.a: Invalid content was found starting with ele ...
- bzoj1024 [SCOI2009]生日快乐【dfs】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1024 普通的深搜. #include <cstdio> #include < ...
- 洛谷 P2841 A*B Problem
https://www.luogu.org/problemnew/show/P2841 根本不会啊... 大概就是:如果两个数模a的结果相同,那么它们前面同时加上一个0或1后模a的结果仍然相同,因此可 ...
- 模拟 HDOJ 5095 Linearization of the kernel functions in SVM
题目传送门 /* 题意:表达式转换 模拟:题目不难,也好理解题意,就是有坑!具体的看测试样例... */ #include <cstdio> #include <algorithm& ...