分页控件(定义分页参数)

~/ViewComponents/PaginationViewComponent.cs

using HelloWorld.DataContext;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; namespace HelloWorld.ViewComponents
{
public class PaginationViewComponent : ViewComponent
{
protected readonly IHostingEnvironment Env;
protected readonly AppBusinessDbContext BusinessDbContext;
protected readonly ILogger Logger; public PaginationViewComponent(IHostingEnvironment env, AppBusinessDbContext context, ILoggerFactory loggerFactory)
{
Env = env;
BusinessDbContext = context;
Logger = loggerFactory.CreateLogger<PaginationViewComponent>();
} public IViewComponentResult Invoke()
{
return View();
}
}
}

~/Views/Shared/Components/Pagination/Default.cshtml

<nav>
<ul class="pagination">
@{
const int pageIncrement = 2;
const int pageTrailing = 5;
var totalPageCount = ViewBag.TotalPageCount == null ? 1 : (int)ViewBag.TotalPageCount;
if (totalPageCount > 1)
{
var pageIndex = ViewBag.CurrentPageIndex == null ? 1 : (int)ViewBag.CurrentPageIndex;
var pageRangeStart = pageIndex <= pageIncrement ? 1 : pageIndex - pageIncrement;
var pageRangeEnd = pageIndex + pageIncrement <= totalPageCount ? (totalPageCount > pageTrailing && pageIndex + pageIncrement < pageTrailing ? pageTrailing : pageIndex + pageIncrement) : totalPageCount;
if (pageRangeStart > 1)
{
<li class="page-item">
<input name="id" type="submit" class="page-link" style="cursor: pointer;" value="1" />
</li>
if (pageRangeStart > 2)
{
<li class="page-item disabled">
<input name="id" type="submit" class="page-link" style="cursor: pointer;" value="..." />
</li>
}
}
for (var i = pageRangeStart; i <= pageRangeEnd; i++)
{
<li class="page-item @(pageIndex == i ? "active" : null)">
<input name="id" type="submit" class="page-link" style="cursor: pointer;" value="@i" />
</li>
}
if (pageRangeEnd < totalPageCount)
{
if (pageRangeEnd + 1 < totalPageCount)
{
<li class="page-item disabled">
<input name="id" type="submit" class="page-link" style="cursor: pointer;" value="..." />
</li>
}
<li class="page-item">
<input name="id" type="submit" class="page-link" style="cursor: pointer;" value="@totalPageCount" />
</li>
}
}
}
</ul>
</nav>

列表页面(更新分页参数)

~/Controllers/ArticleController.cs

        public async Task<IActionResult> List(int id, string keyword)
{
ViewBag.KeyWord = keyword;
ViewBag.CurrentPageIndex = id <= 1 ? 1 : id;
ViewBag.TotalPageCount = 1;
if (!ModelState.IsValid) return View(); List<ResumeDetail> list;
if (string.IsNullOrEmpty(keyword))
{
list = await _businessDbContext.News.Join(_businessDbContext.Mapping, r => r.Gid, m => m.Gid, (r, m) => new { r, m })
.Where(t => t.r.Active && t.m.UserGid == UserGid).OrderByDescending(t => t.r.Created).Select(t => t.r).ToListAsync();
}
else
{
keyword = keyword.ToLower().Trim();
list = await _businessDbContext.News.Join(_businessDbContext.Mapping, r => r.Gid, m => m.Gid, (r, m) => new { r, m })
.Where(t => t.r.Active && t.m.UserGid == UserGid && !string.IsNullOrEmpty(t.r.Title) && t.r.Title.ToLower().Contains(keyword))
.OrderByDescending(t => t.r.Created)
.Select(t => t.r).ToListAsync();
}
var tmpTotalCount = list.Count;
ViewBag.TotalPageCount = (tmpTotalCount / PageSize) + (tmpTotalCount % PageSize == 0 ? 0 : 1);
var result = list.Skip(PageSize * (id - 1)).Take(PageSize).Select(ResumeBasicViewModel.ConvertToViewModel).ToList();
return View(result);
}

~/Views/Article/List.cshtml

        <nav class="navbar navbar-light bg-faded">
<form asp-controller="Candidate" asp-action="List" method="GET">
<div class="row">
<div class="col-6">
@await Component.InvokeAsync("Pagination")
</div>
<div class="col-4">
<input type="text" name="keyword" class="form-control" maxlength="50" placeholder="关键字" value="@ViewBag.KeyWord"/>
</div>
<div class="col-1" style="padding-left: 0;">
<button class="form-control btn btn-success" type="submit">检 索</button>
</div>
<div class="col-1" style="padding-left: 0;">
<button class="form-control btn btn-secondary" type="submit" onclick="fnClearKeyword()">清 空</button>
</div>
</div>
</form>
</nav>

分页效果

参考资料

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components

[Asp.Net Core] - 使用 ViewComponents 实现分页控件的更多相关文章

  1. asp.net webform 自定义分页控件

    做web开发一直用到分页控件,自己也动手实现了个,使用用户自定义控件. 翻页后数据加载使用委托,将具体实现放在在使用分页控件的页面进行注册. 有图有真相,给个直观的认识: 自定义分页控件前台代码: & ...

  2. asp.net分页控件

    一.说明 AspNetPager.dll这个分页控件主要用于asp.net webform网站,现将整理代码如下 二.代码 1.首先在测试页面Default.aspx页面添加引用 <%@ Reg ...

  3. .net core 学习笔记(1)-分页控件的使用

    最近有个小项目,用.net core开发练练手,碰到的第一个问题就是分页控件的问题,自己写太费时间,上网查了下,发现有人已经封装好了的,就拿过来用了,分页控件github:https://github ...

  4. asp.net 分页-自己写分页控件

    去年就发表过asp.net 分页-利用后台直接生成html分页 ,那种方法只是单纯的实现了分页,基本不能使用,那时就想写个自己的分页控件,无奈能力有限.最近有点时间了,就自己做出了这个分页控件.我承认 ...

  5. 分页控件-ASP.NET(AspNetPager)

    AspNetPager是asp.net中常用的分页控件,下载AspNetPager.dll,添加引用,在工具栏就可以看到AspNetPager控件: <div class="oa-el ...

  6. 【asp.net爬虫】asp.NET分页控件抓取第n页数据 javascript:__doPostBack

    最近在模拟HTTP请求抓取数据,但是服务器是asp.net开发的 分页控件代码 <tr> <td align="left">共&nbsp210&am ...

  7. asp.net mvc简单实现基于Razor的分页控件

    最近在写一些web应用了解了一下asp.net mvc发现的确好用,所以直接就干上了.不过在使用asp.net mvc的Razor模板的情况并不向传统webform那样可以使用控件.但从Razor的功 ...

  8. asp.net分页控件库

    AspNetPager分页控件 AspNetPager分页控件解决了分页中的很多问题,直接采用该控件进行分页处理,会将繁琐的分页工作变得简单化,下面是我如何使用AspNetPager控件进行分页处理的 ...

  9. 小白写的一个ASP.NET分页控件,仅供娱乐

    无聊,第一次写博客,自己动手写了一个分页控件.由于我是新手,有很多地方写得不够好,希望各位大牛多多指正.哈哈哈 /// <summary> /// 分页控件 /// </summar ...

随机推荐

  1. 下载svn

    http://subversion.apache.org/download.cgi?update=201708081800 Windows下载zip,其他系统的下载tar.gz

  2. Codeforces Round #383 D

    传送门 Description Arpa has a rooted tree (connected acyclic graph) consisting of n vertices. The verti ...

  3. C# 使用大漠插件, 源码在Github和码云 ..希望对大家有所帮助

    c# 使用大漠插件. 完成 类似 按键精灵的 功能. 方法 注释 正在慢慢的 完善中 目录 仓库 github 码云 准备 效果图 如何运行 1. 注册 大漠dll 到com (资源在 源码 DLL ...

  4. css设置使文字显示2行多余的为省略号...

    1 2 3 4 5 6 7 8 9 10 11 12 .title{        font-size: .7rem;        line-height: 1.5rem;          ove ...

  5. 小福bbs-冲刺日志(第一天)

    [小福bbs-冲刺日志(第一天)] 这个作业属于哪个课程 班级链接 这个作业要求在哪里 作业要求的链接 团队名称 小福bbs 这个作业的目标 开会,安排具体工作 作业的正文 小福bbs-冲刺日志(第一 ...

  6. TreeFrog Framework : High-speed C++ MVC Framework for Web Application http://www.treefrogframework.org

    TreeFrog Framework : High-speed C++ MVC Framework for Web Application http://www.treefrogframework.o ...

  7. Flutter Offstage、Visibility隐藏/可见

    Offstage是控制组件隐藏/可见的组件,如果感觉有些单调功能不全,我们可以使用Visibility,Visibility也是控制子组件隐藏/可见的组件.不同是的Visibility有隐藏状态是否留 ...

  8. linux系统telnet端口不通能收到SYN但不回SYN+ACK响应问题排查(转载)

    linux系统telnet端口不通能收到SYN但不回SYN+ACK响应问题排查 一:背景:一台机器从公司办公网登录不上且所有tcp端口都telnet不通,但是通过同机房同的其它机器却可以正常访问到出问 ...

  9. stl中map的四种插入方法总结

    stl中map的四种插入方法总结方法一:pair例:map<int, string> mp;mp.insert(pair<int,string>(1,"aaaaa&q ...

  10. 超级简单的checkbox赋值,用于记住登陆名

    <input name="rememberme" type="checkbox" id="rememberme" onclick=&q ...