VS - Paginated
2024-08-22 02:21:04
BootstrapPagination.cshtml
@model PaginationModel
<div class="pagination">
<ul>
@foreach (var link in Model.PaginationLinks)
{
@BuildLink(link)
}
</ul>
</div> @helper BuildLink(PaginationLink link)
{
var liBuilder = new TagBuilder("li");
if (link.IsCurrent)
{
liBuilder.MergeAttribute("class", "active");
}
if (!link.Active)
{
liBuilder.MergeAttribute("class", "disabled");
} var aBuilder = new TagBuilder("a");
if (link.PageIndex != null) {
aBuilder.MergeAttribute("data-page", link.PageIndex.Value.ToString());
}
if (link.Url == null)
{
//aBuilder.MergeAttribute("href", "#");
}
else
{
aBuilder.MergeAttribute("href", link.Url);
aBuilder.AddCssClass("paging");
}
if (link.DisplayText == "«")
{
aBuilder.SetInnerText("←");
}
else if (link.DisplayText == "»")
{
aBuilder.SetInnerText("→");
}
else
{
aBuilder.SetInnerText(link.DisplayText);
}
liBuilder.InnerHtml = aBuilder.ToString(); @Html.Raw(liBuilder.ToString())
}
PaginatedList.cs
public class PaginatedList<T> : List<T> {
public int Offset { get; private set; }
public int PageIndex { get; private set; }
public int PageSize { get; private set; }
public int TotalCount { get; private set; }
public int TotalPages { get; private set; } /// <summary>
/// For manually paing.
/// </summary>
/// <param name="source">The result of current page</param>
/// <param name="totalCount"></param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
public PaginatedList(IEnumerable<T> source, int totalCount, int pageIndex, int pageSize)
{
Offset = pageIndex * pageSize;
PageIndex = pageIndex;
PageSize = pageSize;
TotalCount = totalCount;
TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize); this.AddRange(source);
} public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize) {
Offset = pageIndex * pageSize;
PageIndex = pageIndex;
PageSize = pageSize;
TotalCount = source.Count();
TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize); this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize));
} public PaginatedList(IQueryable<T> source, int pageSize, int? offset = null, int? pageIndex = null) {
if (offset != null) {
Offset = offset.Value;
PageIndex = (int)Math.Ceiling((decimal)Offset / pageSize);
} else if (pageIndex != null) {
Offset = pageIndex.Value * pageSize;
PageIndex = pageIndex.Value;
} else {
//offset = null and pageIndex = null
throw new ArgumentNullException("offset and pageIndex");
}
PageSize = pageSize;
TotalCount = source.Count();
TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize); this.AddRange(source.Skip(Offset).Take(PageSize));
} public bool HasPreviousPage {
get {
return (Offset > );
}
} public bool HasNextPage {
get {
return (Offset + PageSize < TotalCount);
}
} }
public PaginatedList<classname> classnameList { get; set; }
classnameList = new PaginatedList<EventCallDetail>(classList, count, (pageIndex > 0) ? pageIndex - 1 : 0, PageSize);
@Html.Pager(PageSize, PageIndex + 1, classnameList.TotalCount).Options(o => o.DisplayTemplate("BootstrapPagination"))
最新文章
- eclipse自动补全的设置
- python 安装操作 MySQL 数据库.
- spark yarn-cluster 和 yarn-client提交的配置
- 【Xamarin挖墙脚系列:典型的业务程序的结构搭建】
- Ubuntu 中使用 谷歌日历
- 【SSH 基础】浅谈Hibernate关系映射(4)
- Canvas基础讲义
- A start job is running for xxx to stop
- 聊聊Docker数据卷和数据卷容器
- zombodb sql functions 说明
- 【Django】ORM操作MySQL数据库遇到的一些问题
- gulpfile.js不断更新中...
- shell 脚本 测试webApp
- c# 输入姓名直到输入的是quit时,停止输入然后显示出输入的姓名个数及姓名
- 【flask macro】No caller defined
- Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f070058 android-studio 3.0 from canary 5 to canary 6
- 黑马程序员:多线程Socket
- js 有小数点数据求和多出小数点问题记录
- BZOJ2588 SPOJ10628 Count on a tree 【主席树】
- RabbitMq ack 与 nack