public class PaginatedList<T> : List<T>
{
public int PageIndex { get; private set; }
public int TotalPages { get; private set; }
public PaginatedList(List<T> items, int count, int pageIndex, int pageSize)
{
PageIndex = pageIndex;
TotalPages = (int)Math.Ceiling(count / (double)pageSize);
this.AddRange(items);
}
public bool HasPreviousPage => PageIndex > 1;
public bool HasNextPage => PageIndex < TotalPages;
public static async Task<PaginatedList<T>> CreateAsync(IQueryable<T> source, int pageIndex, int pageSize)
{
var count = await source.CountAsync();
var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();
return new PaginatedList<T>(items, count, pageIndex, pageSize);
}
}
public async Task<IActionResult> Index(int pagenumber=1)
{
return View(await PaginatedList<Post>.CreateAsync(context.Db_Table,pagenumber,2));
}
@using YourNameSpace.Models
@model PaginatedList<Model>
<!-- Footer -->
@{
var prevDisabled = !Model.HasPreviousPage ? "disabled" : "";
var nextDisabled = !Model.HasNextPage ? "disabled" : "";
}
<footer class="w3-container w3-dark-grey w3-padding-32 w3-margin-top">
<a class="w3-button w3-black w3-padding-large w3-margin-bottom w3-@prevDisabled" asp-action="Index" asp-route-pagenumber="@(Model.PageIndex-1)">Previous</a>
<a class="w3-button w3-black w3-padding-large w3-margin-bottom w3-@nextDisabled" asp-action="Index" asp-route-pagenumber="@(Model.PageIndex+1)" >Next »</a>
</footer>