Страница бритвы. net core 3, нумерация страниц не работает - PullRequest
0 голосов
/ 18 апреля 2020

Я попытался реализовать свой собственный механизм разбиения на страницы на страницах 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?

...