分页问题,​​分页栏

时间:2021-06-08 06:48:02

标签: asp.net model-view-controller bootstrap-4 pagination

我的表中有大约 2000 条记录。所以我需要在我看来使用分页。这是我的操作代码:

     public ActionResult Index(string SearchBy, String Search , int PageId=1)
        {
            
            int skip = (PageId - 1) * 15;
            int count = db.Persons.Count();
            ViewBag.PageID = PageId;
            ViewBag.PageCount = count/15; 
            
            int Ser = 0;
            bool result = int.TryParse(Search, out Ser);
            if (SearchBy == "Code" && result == true)
            {
                return View(db.Persons.Where(x => x.Pcode == Ser || Search == null).OrderBy(x=>x.Pcode).Skip(skip).Take(15));
            }
            else
            {
                return View(db.Persons.Where(x => x.Family.Contains(Search) || Search == null).OrderBy(x => x.Pcode).Skip(skip).Take(15));
            }

        }

这是我在视图中分页的代码:

<div class="row text-center">
    <nav>
        <ul class="pagination">

            <li class="disabled"><a aria-label="Previous" href="#"><span aria-hidden="true">«</span></a></li>
            @for (int i = 1; i <= (ViewBag.PageCount + 1); i++)
            {
                <li class="@(((int)ViewBag.PageID==i)?"active":"")"><a href="/Person /Index?pageid=@i">@i<span class="sr-only">(current)</span></a></li>
            }
            <li><a aria-label="Next" href="#"><span aria-hidden="true">»</span></a></li>
        </ul>
    </nav>
</div>

问题是,当我运行它时,我会看到所有页码,需要将页码限制为页面中的 10 个数字。

1 个答案:

答案 0 :(得分:0)

我一直在努力,最后代码正常了!!! 这是我的操作代码

public ActionResult Index(int totalItems, string SearchBy, String Search, int PageId = 1)
       {
          
           int skip = (PageId - 1) * 15;
           var totalPages = db.Persons.Count() / 15;
           var currentPage = PageId != null ? (int)PageId : 1;
           var startPage = currentPage - 5;
           var endPage = currentPage + 4;
           if (startPage <= 0)
           {
               endPage -= (startPage - 1);
               startPage = 1;
           }
           if (endPage > totalPages)
           {
               endPage = totalPages;
               if (endPage > 10)
               {
                   startPage = endPage - 9;
               }
           }

           ViewBag.TotalItems = totalItems;
           ViewBag.CurrentPage = currentPage;
           ViewBag.TotalPages = totalPages;
           ViewBag.StartPage = startPage;
           ViewBag.EndPage = endPage;
           int Ser = 0;
           bool result = int.TryParse(Search, out Ser);
           if (SearchBy == "Code" && result == true)
           {
               return View(db.Persons.Where(x => x.Pcode == Ser || Search == null).OrderBy(x => x.Pcode).Skip(skip).Take(15));
           }
           else
           {
               return View(db.Persons.Where(x => x.Family.Contains(Search) || Search == null).OrderBy(x => x.Pcode).Skip(skip).Take(15));
           }

       }

这是我的代码

    
<div style="align-content:center">
    @if (ViewBag.EndPage > 1)
    {
    <ul class="pagination">
        @if (ViewBag.CurrentPage > 1)
        {
            <li>
                <a class="page-link" href="/Person/Index">First</a>
            </li>
            <li class="page-item"><a class="page-link" href="/Person/Index?pageid=@(ViewBag.CurrentPage - 1)">Previous</a></li>
        }
        @for (var i = ViewBag.StartPage; i <= ViewBag.EndPage; i++)
        {
            <li class="@(((int)ViewBag.CurrentPage==i)?"active":"")">
                <a class="page-link" href="/Person/Index?pageid=@i">
                    @i
                    <span class="sr-only">(current)</span>
                </a>
            </li>
        }
        @if (ViewBag.CurrentPage < ViewBag.TotalPages)
        {
            <li class="page-item"><a class="page-link" href="/Person/Index?pageid=@(ViewBag.CurrentPage + 1)">Next</a></li>
            <li>
                <a class="page-link" href="/Person/Index?pageid=@(ViewBag.TotalPages)">Last</a>
            </li>
        }
    </ul>
    }
</div>