Я попытался реализовать свой собственный механизм разбиения на страницы на страницах Razor. Net 3 Я начал с создания службы, которую я буду внедрять при запуске
public class PaginationService : IPaginationService
{
private readonly IWebHostEnvironment _hostingEnvironment;
private readonly IUnitOfWork _unitOfWork;
public PaginationService(IWebHostEnvironment hostingEnvironment, IUnitOfWork unitOfWork)
{
_hostingEnvironment = hostingEnvironment;
_unitOfWork = unitOfWork;
}
public async Task<List<Visiteurs>>
GetPaginatedResult(int currentPage, int pageSize = 10)
{
var data = await GetData();
return data.OrderBy(d => d.Id)
.Skip((currentPage - 1) * pageSize)
.Take(pageSize).ToList();
}
public async Task<int> GetCount()
{
var data = await GetData();
return data.Count();
}
private async Task<IEnumerable<Visiteurs>> GetData()
{
var task = await Task.Factory.StartNew(
()=>_unitOfWork.Operations.GetAll()
);
return task;
}
}
Затем в PageModel я добавил следующий код
public class IndexModel : PageModel
{
IPaginationService _pagination;
public int index = 0;
[BindProperty]
public int? CurrentPage { get; set; }
public int Count { get; set; }
public int PageSize { get; set; } = 4;
public int TotalPages => (int)Math.Ceiling(decimal.Divide(Count, PageSize));
public bool ShowPrevious => CurrentPage > 1;
public bool ShowNext => CurrentPage < TotalPages;
public bool ShowFirst => CurrentPage != 1;
public bool ShowLast => CurrentPage != TotalPages;
public IndexModel(IPaginationService pagination)
{
_pagination = pagination;
}
public List<Visiteurs> Visitors { get; set; }
async public Task OnGetAsync()
{
await Navigate();
}
async public Task OnPostAsync()
{
await Navigate();
}
public async Task Navigate()
{
Visitors = await _pagination.GetPaginatedResult(CurrentPage ?? 1, PageSize);
Count = await _pagination.GetCount();
}
}
И в сторону бритвы я поставил этот код
@page "{currentpage:int?}"
@model IndexModel
@{
ViewData["Title"] = "Home page";
}
<div class="card-deck">
@foreach (var item in Model.Visitors)
{
<div class="card m-3" style="min-width: 18em; max-width:30.5%">
<div class="card-header">
<h3>@item.Nom</h3>
</div>
@if (item.Images != null)
{
var base64 = Convert.ToBase64String(item.Images);
var imgSrc = String.Format("data:image/gif;base64,{0}", base64);
<img class="card-img-top img-thumbnail"
src="@imgSrc" asp-append-version="true" />
}
<div class="card-footer text-center">
<a href="#" class="btn btn-primary m-1">Modifier</a>
<a href="#" class="btn btn-primary m-1">Supprimer</a>
</div>
</div>
Model.index++;
}
</div>
<div>
<ul class="pagination">
@for (var i = 1; i <= Model.TotalPages; i++)
{
<li class="page-item @(i == Model.CurrentPage ? "active" : "")">
<form method="post">
<button asp-page="/pagination" type="submit" asp-route-currentpage="@i" class="page-link">@i</button>
</form>
</li>
}
</ul>
</div>
Страница отображается нормально без ошибок, однако я не могу перемещаться по странице тритона, кажется, текущая страница не связаны или я некоторые miskates?