ASP. NET Требуется справка по Core Paging - PullRequest
0 голосов
/ 13 июля 2020

Требуется помощь. Итак, в настоящее время я работаю над ASP. NET Core Paging, и он не работает должным образом. Он показывает мне тот же результат на страницах. Не знаю, в чем проблема: / Кто-нибудь знает, как решить эту проблему, вот мой код

Controlor

    public IActionResult Index( int? pageNumber)
    {
        int pageSize = 5;
        var personnels = from s in _context.personnels
                         select s;
        return View(Pagination<PersonnelModel>.CreateAsync(personnels.AsQueryable<PersonnelModel>(), pageNumber ?? 1, pageSize));
    }

Pagination Класс

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using Microsoft.EntityFrameworkCore;
    
    namespace personnelAUTHENTIFICATION
    {
        public class Pagination<T> : List<T>
        {
                public int PageIndex { get; private set; }
                public int TotalPages { get; private set; }
    
                public Pagination(List<T> items, int count, int pageIndex, int pageSize)
                {
                    PageIndex = pageIndex;
                    TotalPages = (int)Math.Ceiling(count / (double)pageSize);
                    this.AddRange(items);
                }
    
                public bool HasPreviousPage
                {
                    get
                    {
                        return (PageIndex > 1);
                    }
                }
    
                public bool HasNextPage
                {
                    get
                    {
                        return (PageIndex < TotalPages);
                    }
                }
    
                public int TotalPageNo
                {
                    get
                    {
                        return TotalPages;
                    }
                }
    
                public static Pagination<T> CreateAsync(IQueryable<T> source, int pageIndex, int pageSize)
                {
                    var count = source.Count();
                    var items = source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
                    return new Pagination<T>(items, count, pageIndex, pageSize);
                }
            }
        }

1 Ответ

0 голосов
/ 14 июля 2020

Я тестировал ваш код на своем образце, вроде у меня все работает хорошо. Я думаю, что проблема связана со ссылками на страницы на странице просмотра. Пожалуйста, проверьте правильность URL ссылки и номера страницы.

Вы также можете сослаться на следующий пример кода:

Код в контроллере:

    public IActionResult EmployeeIndex(int? pageNumber, int? CurrentPage)
    {
          
        int pageSize = 3;
        if(CurrentPage != null)
        {
            pageNumber = CurrentPage;
            ViewBag.CurrentPage = CurrentPage;
        }

        return View(Pagination<Employee>.CreateAsync(GetEmployee().AsQueryable<Employee>(), pageNumber ?? 1, pageSize)); 
    }

Код в Страница просмотра:

@model Pagination<MVCSample.Models.Employee>
  
<table class="table">
     ...table content...
</table>

@{
    var prevDisabled = !Model.HasPreviousPage ? "disabled" : "";
    var nextDisabled = !Model.HasNextPage ? "disabled" : "";
} 
<ul class="pagination">
    <li>
        <a asp-action="EmployeeIndex"
           asp-route-pageNumber="@(Model.PageIndex - 1)"
           class="btn btn-default @prevDisabled">
            Previous
        </a>
    </li>c
    @for (var i = 1; i <= Model.TotalPages; i++)
    {
        <li class="page-item @(i == ViewBag.CurrentPage ? "active" : "")">
            <a asp-action="EmployeeIndex" asp-route-currentpage="@i" class="page-link">@i</a>
        </li>
    }
    <li>
        <a asp-action="EmployeeIndex"
           asp-route-pageNumber="@(Model.PageIndex + 1)"
           class="btn btn-default @nextDisabled">
            Next
        </a>
    </li>
</ul>

Пожалуйста, проверьте метод действия, вы можете изменить его на свои собственные.

Код в Pagination.cs (на основе вашего кода я просто добавляю свойство CurrentPage для отображения номера текущей страницы):

public class Pagination<T>:List<T>
{
    [BindProperty(SupportsGet = true)]
    public int CurrentPage { get; set; } = 1
    ....
 }

Результат примерно такой:

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...