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 > 0); } } 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"))