• 1400/03/18
  • 0
  • 333
1400/03/18 |
backend

Pagination - مشکل در نمایش تعداد صفحه

سلام

بنده یک جدول با 2000 رکورد دارم که برای آن pagiantion  تعریف کرده ام ولی داخل ویو کد را نتوانستم اصلاح کنم تا تعداد شماره صفحه  محدود و مثلا 10 صفحه باشد .

کد داخل بفرم زیر هست:

<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>

لطفا راهنمایی کنید کد را به چه صورتی اصلاح کنم


مشکل اینه که شما دارید بر روی کل تعداد صفحات این حلقه رو اجرا می کنید و به تعداد همه صفحات اجرا می شود

باید یا استفاده از یک الگوریتم تعداد مشخصی مثلا 5 صفحه را بدست بیاورید و فقط آنها را نمایش دهید.

 

از کلاس زیر می توانید برای بدست آوردن تعداد صفحه ها استفاده کنید

 

  public class Pager
        {
            public Pager(
    long totalItems,
    int currentPage = 1,
    int pageSize = 10,
    int maxPages = 5)
            {
                // calculate total pages
                var totalPages = (int)Math.Ceiling((decimal)totalItems / (decimal)pageSize);

                // ensure current page isn't out of range
                if (currentPage < 1)
                {
                    currentPage = 1;
                }
                else if (currentPage > totalPages)
                {
                    currentPage = totalPages;
                }

                int startPage, endPage;
                if (totalPages <= maxPages)
                {
                    // total pages less than max so show all pages
                    startPage = 1;
                    endPage = totalPages;
                }
                else
                {
                    // total pages more than max so calculate start and end pages
                    var maxPagesBeforeCurrentPage = (int)Math.Floor((decimal)maxPages / (decimal)2);
                    var maxPagesAfterCurrentPage = (int)Math.Ceiling((decimal)maxPages / (decimal)2) - 1;
                    if (currentPage <= maxPagesBeforeCurrentPage)
                    {
                        // current page near the start
                        startPage = 1;
                        endPage = maxPages;
                    }
                    else if (currentPage + maxPagesAfterCurrentPage >= totalPages)
                    {
                        // current page near the end
                        startPage = totalPages - maxPages + 1;
                        endPage = totalPages;
                    }
                    else
                    {
                        // current page somewhere in the middle
                        startPage = currentPage - maxPagesBeforeCurrentPage;
                        endPage = currentPage + maxPagesAfterCurrentPage;
                    }
                }
                // calculate start and end item indexes
                var startIndex = (currentPage - 1) * pageSize;
                var endIndex = Math.Min(startIndex + pageSize - 1, totalItems - 1);

                // create an array of pages that can be looped over
                var pages = Enumerable.Range(startPage, (endPage + 1) - startPage);


                TotalPages = totalPages;
                Pages = pages;
            }  
            public IEnumerable<int> Pages { get; private set; }
            public int TotalPages { get; private set; }
        }



پاسخی برای این باگ ارسال کنید

لطفا کدها را درون قطعه کد ارسال نمایید

برای ارسال پاسخ باید وارد حساب کاربری خود شوید
ورود به حساب کاربری