توضیحات و دانلود

صفحه بندی Server Side با استفاده از Entity Framework در ASP.Net MVC
0 0
صفحه بندی Server Side با استفاده از Entity Framework در ASP.Net MVC

با سلام در این مقاله با یک مثال توضیح خواهیم داد که چگونه می توان صفحه بندی Server Side را با استفاده از Entity Framework در ASP.Net MVC Razor پیاده سازی کرد.
بانک اطلاعات
در اینجا از پایگاه داده Northwind استفاده می کنیم. شما می توانید آن را از اینجا دانلود کنید.
پایگاه داده Northwind را بارگیری و نصب کنید
ایجاد Entity Data Model
اولین قدم ایجاد یک برنامه ASP.Net MVC و اتصال آن به بانک اطلاعات Northwind با استفاده از Entity Framework است.
در زیرEntity Data Model جدول مشتریان از پایگاه داده Northwind است که بعدا در این پروژه استفاده خواهد شد.

Model
کلاس Model زیر با نام CustomerModel از سه ویژگی تشکیل شده است.
1. Customers - مجموعه لیست داده های Model مشتری که سوابق مشتریان را در خود جای می دهد.
2. CurrentPageIndex - مقدار شاخص صفحه فعلی را نگه می دارد.
3. PageCount - این مقدار با استفاده از حداکثر ردیف ها نمایش داده شده و کل رکورد های موجود در جدول محاسبه می شود.

public class CustomerModel
{
    ///<summary>
    /// Gets or sets Customers.
    ///</summary>
    public List<Customer> Customers { get; set; }
 
    ///<summary>
    /// Gets or sets CurrentPageIndex.
    ///</summary>
    public int CurrentPageIndex { get; set; }
 
    ///<summary>
    /// Gets or sets PageCount.
    ///</summary>
    public int PageCount { get; set; }
}

Controller
دو روش Action با نام Index وجود دارد ، یکی برای اجرای عملیات GET و دیگری برای دستیابی به عملکرد POST.
روش GetCustomers
روش GetCustomers پارامتر currentPage را می پذیرد. این یک متغیر ثابت به نام maxRows است که حداکثر رکوردهای نمایش داده شده در هر صفحه را تعیین می کند.
توجه :

می توانید مقدار متغیر maxRows را مطابق نیاز خود تغییر دهید و همچنین مقدار آن را از AppSettings خارج کنید تا نیازی به تغییر کد درهر بار نداشته باشید.
ابتدا یک شیء از کلاس CustomerModel ایجاد و سپس سوابق با استفاده از Entity Framework از جدول Customers گرفته می شوند و به ویژگی CustomerModel اختصاص داده می شوند.
مقدار PageCount با تقسیم شمارش سوابق بر حداکثر ردیف هایی که نمایش داده می شود محاسبه می شود.
مقدار پارامتر currentPage به ویژگی CurrentPageIndex اختصاص داده می شود.
صفحه بندی با استفاده از توابع Skip and Take بر روی سوابق انجام می شود.
عملکرد Index Start ، Skipرا از مجموعه سوابق گرفته شده دریافت ، یعنی اگر صفحه 1 باشد ، شاخص شروع (1) * 10 = 0 خواهد بود.
مثال : اگر صفحه فعلی 1 باشد و حداکثر ردیف 10 باشد ، شاخص شروع (1) * 10 = 0 خواهد بود.
تابع Take ردیف ها را براساس مقدار متغیر maxRows دریافت می کند.
عملیات GET
در روش GET Action ، متد GetCustomers با مقدار پارامتر فعلیPage که به عنوان عدد 1 منتقل می شود فراخوانی می شود زیرا وقتی برای اولین بار به View دسترسی پیدا می کنید ، سوابق صفحه اول نمایش داده می شود.
عملیات ارسال
در داخل روش POST Action ، مقدار CurrentPageIndex از مجموعه Request.Form گرفته شده و به روش GetCustomers منتقل می شود.

public class HomeController : Controller
{
    // GET: Home
    public ActionResult Index()
    {
        return View(this.GetCustomers(1));
    }
 
    [HttpPost]
    public ActionResult Index(int currentPageIndex)
    {
        return View(this.GetCustomers(currentPageIndex));
    }
 
    private CustomerModel GetCustomers(int currentPage)
    {
        int maxRows = 10;
        using (NorthwindEntities entities = new NorthwindEntities())
        {
            CustomerModel customerModel = new CustomerModel();
 
            customerModel.Customers = (from customer in entities.Customers
                                        select customer)
                        .OrderBy(customer => customer.CustomerID)
                        .Skip((currentPage - 1) * maxRows)
                        .Take(maxRows).ToList();
 
            double pageCount = (double)((decimal)entities.Customers.Count() / Convert.ToDecimal(maxRows));
            customerModel.PageCount = (int)Math.Ceiling(pageCount);
 
            customerModel.CurrentPageIndex = currentPage;
 
            return customerModel;
        }
    }
}

View
در داخل View، اولین خط کلاس CustomerModel به عنوان Model برای View اعلام می شود.
View شامل یک فرم HTML است که با استفاده از روش Html.BeginForm با پارامترهای زیر ایجاد شده است.
ActionName - نام عمل در این حالت Index است.
ControllerName - نام Controller در این حالت Home است.
FormMethod - این روش فرم یعنی GET یا POST را مشخص می کند. در این حالت روی POST تنظیم می شود.
برای Viewسوابق از جدول HTML استفاده می شود. یک حلقه بر روی ویژگی مشتریان کلاس CustomerModel اجرا خواهد شد که ردیف های جدول HTML را با سوابق مشتری ایجاد می کند.
برای ساخت Pager ، یک حلقه FOR از مقدار 1 تا مقدار ویژگی PageCount کلاس CustomerModel برای ایجاد یک جدول HTML برای Pager اجرا می شود.
هنگامی که در Anchor HTML در Pager کلیک می شود ، عملکرد JavaScript به نام PagerClick اجرا می شود که Index دکمه Pager کلیک شده را در HiddenField قرار می دهد و سپس فرم را ارسال می کند.

@model Grid_Paging_MVC.Models.CustomerModel
 
@{
    Layout = null;
}
 
<!DOCTYPE html>
 
<html>
<head>
    <meta name="viewport" content="width=device-width"/>
    <title>Index</title>
    <style type="text/css">
        body
        {
            font-family: Arial;
            font-size: 10pt;
        }
 
        table
        {
            border: 1px solid #ccc;
            border-collapse: collapse;
            background-color: #fff;
        }
 
        table th
        {
            background-color: #B8DBFD;
            color: #333;
            font-weight: bold;
        }
 
        table th, table td
        {
            padding: 5px;
            border: 1px solid #ccc;
        }
 
        table, table table td
        {
            border: 0px solid #ccc;
        }
    </style>
</head>
<body>
    <div>
        @using (Html.BeginForm("Index", "Home", FormMethod.Post))
        {
            <h4>Customers</h4>
            <hr/>
            <table cellpadding="0" cellspacing="0">
                <tr>
                    <th>CustomerID</th>
                    <th>ContactName</th>
                    <th>City</th>
                    <th>Country</th>
                </tr>
                @foreach (Customer customer in Model.Customers)
                {
                    <tr>
                        <td>@customer.CustomerID</td>
                        <td>@customer.ContactName</td>
                        <td>@customer.City</td>
                        <td>@customer.Country</td>
                    </tr>
                }
            </table>
            <br/>
            <table cellpadding="0" cellspacing="0">
                <tr>
                    @for (int i = 1; i <= Model.PageCount; i++)
                    {
                        <td>
                            @if (i != Model.CurrentPageIndex)
                            {
                                <a href="javascript:PagerClick(@i);">@i</a>
                            }
                            else
                            {
                                <span>@i</span>
                            }
                        </td>
                    }
                </tr>
            </table>
            <input type="hidden" id="hfCurrentPageIndex" name="currentPageIndex"/>
        }
        <script type="text/javascript">
            function PagerClick(index) {
                document.getElementById("hfCurrentPageIndex").value = index;
                document.forms[0].submit();
            }
        </script>
    </div>
</body>
</html>

 


دانلود
  • لینک های دانلود دوره های آموزشی تا پایان دوره قابل دانلود می باشد.
  • برای خارج کردن فایل ها از حالت فشرده از ورژن جدید نرم افزار winrar استفاده کنید.
  • برای خارج کردن فایل ها از حالت فشرده لینک های دانلودی که چندین قسمت می باشند فقط قسمت اول را از حالت فشرده خارج کنید.
  • لطفا توضیحات نوشته شده برای مطالب را با دقت بخوانید.
  • برای نمایش فیلم ها می توانید از نرم افزار هایی مانند Km Player , VLC Player یا Media Player Classic استفاده کنید.

ارسال نظر
ارسال پیام به :