【问题标题】:.NET 6 how to add pages numbers in the view?.NET 6 如何在视图中添加页码?
【发布时间】:2022-02-17 16:20:24
【问题描述】:

我正在关注 Microsoft 教程: https://docs.microsoft.com/fr-fr/aspnet/core/data/ef-mvc/sort-filter-page?view=aspnetcore-6.0 它可以工作,但只有下一个和上一个的按钮...... NEXT和PREVIOUS按钮之间的页码列表如何实现代码?

我创建了这个代码,但我确信有更好的方法来完成这个:

    <a asp-action="Index"
   asp-route-sortOrder="@ViewData["CurrentSort"]"
   asp-route-pageNumber="@(Model.PageIndex - 1)"
   asp-route-currentFilter="@ViewData["CurrentFilter"]"
   class="btn btn-default @prevDisabled">
    Previous
</a>

@for (int i = 1; i < Model.TotalPages + 1; i++)
{
    if (Model.PageIndex == i)
    {
        <b>@i.ToString()</b>
    }
    else
    {
        <a asp-action="Index"
   asp-route-sortOrder="@ViewData["CurrentSort"]"
   asp-route-pageNumber="@i.ToString()"
   asp-route-currentFilter="@ViewData["CurrentFilter"]"
   class="btn btn-default">
            @i.ToString()
        </a>
    }
}

<a asp-action="Index"
   asp-route-sortOrder="@ViewData["CurrentSort"]"
   asp-route-pageNumber="@(Model.PageIndex + 1)"
   asp-route-currentFilter="@ViewData["CurrentFilter"]"
   class="btn btn-default @nextDisabled">
    Next
</a>

谢谢

【问题讨论】:

    标签: pagination asp.net-core-mvc .net-6.0


    【解决方案1】:

    你可以试试 LazZiya.TagHelpers 。你可以通过 Nuget 找到它。

    在cshtml中使用:

    @addTagHelper *,LazZiya.TagHelpers
    
    
    
    
    
    <paging page-no="Model.PageIndex"
    
            page-size="Model.Pagesize"
            total-records="Model.TotalRecords"  
     >
    </paging>
    

    模型中的代码:

    public class PaginatedList<T> : List<T>
        {
            public int PageIndex { get; private set; }
            public int TotalPages { get; private set; }
            public  int  Pagesize { get; private set; }
    
            public int TotalRecords { get; private set; }
    
            public PaginatedList(List<T> items, int count, int pageIndex, int pageSize)
            {
                PageIndex = pageIndex;
                TotalRecords = count;
                Pagesize = pageSize;
                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 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(string sortOrder,string currentFilter,string searchString,int? P)
            {
                ViewData["CurrentSort"] = sortOrder;
                ViewData["NameSortParm"] = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
                ViewData["DateSortParm"] = sortOrder == "Date" ? "date_desc" : "Date";
    
                if (searchString != null)
                {
                    P = 1;
                }
                else
                {
                    searchString = currentFilter;
                }
    
                ViewData["CurrentFilter"] = searchString;
                var students = from s in _context.Student
                               select s;
                if (!String.IsNullOrEmpty(searchString))
                {
                    students = students.Where(s => s.LastName.Contains(searchString)
                                           || s.FirstMiddleName.Contains(searchString));
                }
                switch (sortOrder)
                {
                    case "name_desc":
                        students = students.OrderByDescending(s => s.LastName);
                        break;
                    case "Date":
                        students = students.OrderBy(s => s.EnrollmentDate);
                        break;
                    case "date_desc":
                        students = students.OrderByDescending(s => s.EnrollmentDate);
                        break;
                    default:
                        students = students.OrderBy(s => s.LastName);
                        break;
                }
                int pageSize = 3;
               
                return View(await PaginatedList<Student>.CreateAsync(students.AsNoTracking(), P ?? 1, pageSize));
            }
    

    结果:

    【讨论】:

      猜你喜欢
      • 2022-08-22
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      相关资源
      最近更新 更多