[Asp.Net Core] - 使用 ViewComponents 实现分页控件
分页控件(定义分页参数)
~/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 实现分页控件的更多相关文章
- asp.net webform 自定义分页控件
做web开发一直用到分页控件,自己也动手实现了个,使用用户自定义控件. 翻页后数据加载使用委托,将具体实现放在在使用分页控件的页面进行注册. 有图有真相,给个直观的认识: 自定义分页控件前台代码: & ...
- asp.net分页控件
一.说明 AspNetPager.dll这个分页控件主要用于asp.net webform网站,现将整理代码如下 二.代码 1.首先在测试页面Default.aspx页面添加引用 <%@ Reg ...
- .net core 学习笔记(1)-分页控件的使用
最近有个小项目,用.net core开发练练手,碰到的第一个问题就是分页控件的问题,自己写太费时间,上网查了下,发现有人已经封装好了的,就拿过来用了,分页控件github:https://github ...
- asp.net 分页-自己写分页控件
去年就发表过asp.net 分页-利用后台直接生成html分页 ,那种方法只是单纯的实现了分页,基本不能使用,那时就想写个自己的分页控件,无奈能力有限.最近有点时间了,就自己做出了这个分页控件.我承认 ...
- 分页控件-ASP.NET(AspNetPager)
AspNetPager是asp.net中常用的分页控件,下载AspNetPager.dll,添加引用,在工具栏就可以看到AspNetPager控件: <div class="oa-el ...
- 【asp.net爬虫】asp.NET分页控件抓取第n页数据 javascript:__doPostBack
最近在模拟HTTP请求抓取数据,但是服务器是asp.net开发的 分页控件代码 <tr> <td align="left">共 210&am ...
- asp.net mvc简单实现基于Razor的分页控件
最近在写一些web应用了解了一下asp.net mvc发现的确好用,所以直接就干上了.不过在使用asp.net mvc的Razor模板的情况并不向传统webform那样可以使用控件.但从Razor的功 ...
- asp.net分页控件库
AspNetPager分页控件 AspNetPager分页控件解决了分页中的很多问题,直接采用该控件进行分页处理,会将繁琐的分页工作变得简单化,下面是我如何使用AspNetPager控件进行分页处理的 ...
- 小白写的一个ASP.NET分页控件,仅供娱乐
无聊,第一次写博客,自己动手写了一个分页控件.由于我是新手,有很多地方写得不够好,希望各位大牛多多指正.哈哈哈 /// <summary> /// 分页控件 /// </summar ...
随机推荐
- Semantic Segmentation on Remotely Sensed Images Using an Enhanced Global Convolutional Network with Channel Attention and Domain Specific Transfer Learning
创新点: 1.在GCN(global convolutional network)基础上,把他的backbone替换成更多层的,使其适应中分辨率影像,resnet50,101,152 2.利用 cha ...
- Hadoop NameNode 元数据以及查看元数据的方式
HDFS中NameNode工作机制1.NameNode的主要功能(1)负责客户端请求的响应: (2)负责元数据的管理. 2.元数据管理namenode对数据管理采用了三种存储形式: (1)内存元数据: ...
- QTextToSpeech Win7奔溃
在linux下,它是调用speech-dispatcher.在其它不同的平台上,调用各自平台的TTS引擎.所以在使用的时候,要确保本地的TTS引擎是可用的. 本地TTS引擎不可用可能会在声明QText ...
- [编码解码] 关于AES加解密中CBC模式的IV初始化向量的安全性问题
copy from : https://www.jianshu.com/p/45848dd484a9 前段时间,在研究HLS的AES加密,由于一个地方电视台的HLS流有AES加密,在查看了相关的加解密 ...
- JVM 扩展类加载器1
1.创建类 public class MyTest19 { public static void main(String[] args) throws Exception { System.out.p ...
- ftp配置 Laravel上传文件到ftp服务器
listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask= dirmessage_enable=YES ...
- Centos7修改为固定IP后 yum 出现could not retrieve mirrorlist
Centos7修改为固定IP后 yum 出现could not retrieve mirrorlist,发现yum源的域名无法解析 按照6,修改/etc/resovle.conf,新增域名解析服务器1 ...
- Android输入法遮挡了输入框,使用android:fitsSystemWindows="true"后界面顶部出现白条解决方案
我的最外层是LinearLayout,自定义CustomLinearLayout继承LinearLayout,重写fitSystemWindows和onApplyWindowInsets两个方法: p ...
- 【转载】 tf.train.slice_input_producer()和tf.train.batch()
原文地址: https://www.jianshu.com/p/8ba9cfc738c2 ------------------------------------------------------- ...
- kinova environment
luo@luo-ThinkPad-W530:~$ luo@luo-ThinkPad-W530:~$ luo@luo-ThinkPad-W530:~$ luo@luo-ThinkPad-W530:~$ ...