آموزش ایجاد صفحه گذاری در ASP.Net MVC

آموزش ایجاد صفحه گذاری در ASP.Net MVC

هر وب سایت یا وبلاگ یا سیستم مدیریت محتوا به صفحه گذاری نیاز دارد.تو این پست نحوه ایجاد صفحه گذاری را در ASP.Net MVC آموزش میدم.

یه پروژه ASP.Net Mvc Razor و ایجاد کنید.

یه پوشه به نام Helper ایجاد و یه کلاس به نام PaginatedList.cs ایجاد کنید.

1

محتوای کلاس PaginatedList.cs به این صورت می باشد.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Bnp.Helpers
{
    public class PaginatedList :List
    {

        public PaginatedList(IEnumerable source, int pageIndex, int pageSize)
        {
            if (pageIndex < 1)
                throw new ArgumentOutOfRangeException("pageIndex", pageIndex, 

"pageIndex cannot be below 1.");
            if (pageSize < 1)
                throw new ArgumentOutOfRangeException("pageSize", pageSize, 

"PageSize cannot be less than 1.");

            TotalCount = source == null ? 0 : source.Count();
            PageIndex = pageIndex;
            PageSize = pageSize;
            TotalPages = TotalCount>0
                ?(int)Math.Ceiling(TotalCount / (double)PageSize)
                :۰;
            var numberOfLastItemOnPage = FirstItemOnPage + PageSize - 1;
            LastItemOnPage = numberOfLastItemOnPage > TotalCount
                            ? TotalCount
                            : numberOfLastItemOnPage;

            if(source!=null && TotalCount>0)
                this.AddRange(pageIndex==1
                    ? source.Skip(0).Take(pageSize).ToList()
                    : source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList());
        }

        public int PageIndex { get; set; }
        public int PageSize { get; set; }
        public int TotalCount { get; set; }
        public int TotalPages { get; set; }
        public int FirstItemOnPage { get { return ((PageIndex - 1)*PageSize + 1); } }
        public int LastItemOnPage { get; set; }

        public bool IsFirstPage { get { return (PageIndex == 1); } }

        public bool IsLastPage { get { return (PageIndex >= TotalPages); } }

        public bool HasPreviousPage { get { return (PageIndex > 1); } }

        public bool HasNextPage { get { return (PageIndex  < TotalPages); } }
    }
}

تابع PaginatedList یک لیست و اندیس صفحه و اندازه صحفات را دریافت می کند. سپس این لیست را به لیست های کوچکی به اندازه pageSize تقسیم و هر بار صفحه با اندیس pageIndex را برمی گرداند. همچنین کلاس اطلاعاتی نظیر تعداد صفحات و شماره صحفه جاری و صفحه قبل و بعد و … را نیز در اخیار ما قرار می دهد.

کلاس HomeController را باز کنید و Index رو به شکل زیر تغییر دهید.

public ActionResult Index(int? page)
        {
            var posts=_context.Articles();
            int pageSize =15;
            var paginatedPosts=new PaginatedList<Articles>
                 (posts, page ?? 1, pageSize);
        }

متغییر posts حاوی لیستی از پستهای است که نمایش خواهند داده شد.

متغییر عددی pageSize تعداد پست هایست که در هر صفحه نمایش داده می شوند.

متغییر paginatedPosts حاوی اولین صفحه نمایش و اطلاعات مربوط به صفحه بندی است.

در انتها برای نمایش صفحه در Home/Index.chtml کد زیر را قرار می دهیم.

@foreach (var item in Model.OrderByDescending(t => t.DateCreated))
{
<article>
    <header>
        <h2>
            @Html.ActionLink(item.Title, "Details", new
            {
                controller = "Article",
                action = "Details",
                id = item.Url
            })
        </h2>
    </header>
    <div class="entry-content">
        <p>
            @item.Summary.ScrubHtml()
        </p>
    </div>
    <div>
        @if (item.HaveMore)
        {
            <p>
                @Html.ActionLink("ادامه مطلب", "Details", new
                {
                    controller = "Article",
                    action = "Details",
                    id = item.Url
                }, new { @class = "button " })
            </p>
        }
    </div>
</article>
}
<div >
@if (Model.TotalPages > 1)
{
<div class="pagin">
<ul>
    @if (Model.HasPreviousPage)
    {
        <li class="previous">
            @Html.RouteLink("«", "PostPaging",
                new { page = (Model.PageIndex - 1) })
        </li>
    }
    else
    {
        <li class="previous">
            <a>«</a>
        </li>
    }
    @for (int pages = 1; pages <= Model.TotalPages; pages++)
    {
        if (pages == Model.PageIndex)
        {
            <li class="active"><a>@pages</a></li>
        }
        else
        {
            <li>
                @Html.RouteLink(pages.ToString(), "PostPaging",
                    new { page = pages })
            </li>
        }
    }
    @if (Model.HasNextPage)
    {
        <li class="next">
            @Html.RouteLink("»", "PostPaging",
                new
                {
                    page = (Model.PageIndex + 1)
                }
            )
        </li>
    }
    else
    {
        <li class="next">
            <a>»</a>
        </li>
    }
</ul>
</div>
}
</div>

بعد از اجرای کد صفحه بندی را مشاهده خواهید کرد.

+5
0


هرگونه انتشار مطالب اختصاصي و محصولات اين سايت بجز با درج لينک مستقيم شرعا حرام بوده و پيگرد قانوني دارد.
طبق ماده 12 فصل سوم قانون جرائم رايانه هرگونه کپي برداري ممنوع بوده و پيگرد قانوني دارد. براي اطلاعات بيشتر کليک کنيد.

درباره‌ی مدیر سایت

در اردیبهشت سالی از سال های خدا بدنیا آمدم.درس خواندم و مهندس شدم.ازآنجایی که علاقه شدیدی به برنامه نویسی و ترجمه وآموزش داشتم در راستای اهدافم این وبسایت رو راه اندازی کردم تا دین خود را به جامعه برنامه نویسی ادا کرده باشم.

۲ دیدگاه ها

  1. کار نمیکنه و خطا میده
    از همون سطر اول
    آخه لیست خالی قبول نمیکنه

دیدگاه خود را بنویسید

آدرس پست الکترونیک شما منتشر نخواهد شد.خانه های ضروری نشانه گذاری شده اند. *

*


یک × = 2

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>