1

how can i add a custom paging to my application that's writing in C# MVC5 with using a database and Entity Framework 6 with Bootstrap ?

  • 1
    is it a question? kindly use blogs to publish technical articles. – pgcan Dec 26 '16 at 20:06
  • 1
    While it is encouraged on stackoverflow to answer your own questions, and post questions your already have a solution for, you should write an actual question with a problem description that your answer answers, so that it can be found by others, and also can be answered by others with maybe a better solution. Don't (basically) write "I wrote some code, here is it". Currently, your actual question is just one line and would not qualify as a good question on stack overflow. And remove the "The Best way to..." from your answer, you might be surprised about different ways to solve your problem. – Solarflare Dec 26 '16 at 22:42
  • thank you , its updated now – Mohammed Suleiman Dec 27 '16 at 08:43

1 Answers1

5

This is my code and its working properly :

Note: this paging code need bootstrap to be exist

Add new file in the models named paging.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using System.Web.Security;

namespace project.Models
{
    public class Paging
{
    private projectEntities db = new projectEntities();

    public string Pagination(int total, int page, int Take, int offset, string Controler, string View, string Params)
    {
        if (total > 0)
        {
            string c_url = HttpContext.Current.Request.Url.AbsoluteUri.ToLower();
            string URL = c_url.Substring(0, c_url.IndexOf(Controler.ToLower()));
            double rowPerPage = Take;
            if (Convert.ToDouble(total) < Take)
            {
                rowPerPage = Convert.ToDouble(total);
            }

            int totalPage = Convert.ToInt16(Math.Ceiling(Convert.ToDouble(total) / rowPerPage));
            int current = page;
            int record = offset;
            int pageStart = Convert.ToInt16(Convert.ToDouble(current) - Convert.ToDouble(offset));
            int pageEnd = Convert.ToInt16(Convert.ToDouble(current) + Convert.ToDouble(offset));
            string numPage = "";
            if (totalPage < 1) return "";
            numPage += "<ul class='pagination'>";
            if (current > 1) numPage += "<li class='previous'><a href='" + URL + Controler + View + "?Page=" + (page - 1) + Params + "' aria-label='Previous'>&laquo;</a></li>";
            else numPage += "<li class='disabled'><a href='#' aria-label='Previous'><span aria-hidden='true'>&laquo;</span></a></li>";
            if (current > (offset + 1)) numPage += "<li><a href='" + URL + Controler + View + "?Page=1" + Params + "' name='page1'>1</a></li><li class='disabled spacing-dot'><a href='#'>...</a></li>";
            for (int i = 1; i <= totalPage; i++)
            {
                if (pageStart <= i && pageEnd >= i)
                {
                    if (i == current) numPage += "<li class='active'><a href='#'>" + i + " <span class='sr-only'>(current)</span></a></li>";
                    else numPage += "<li><a href='" + URL + Controler + View + "?Page=" + i + Params + "'>" + i + "</a></li>";
                }
            }
            if (totalPage > pageEnd)
            {
                record = offset;
                numPage += "<li class='disabled spacing-dot'><a href='#'>...</a></li><li><a href='" + URL + Controler + View + "?Page=" + (totalPage) + Params + "'>" + totalPage + "</a></li>";
            }
            if (current < totalPage) numPage += "<li class='next'><a class='ui-bar-d' href='" + URL + Controler + View + "?Page=" + (page + 1) + Params + "'>&raquo;</a></li>";
            else numPage += "<li class='disabled'><a href='#' aria-label='Previous'><span aria-hidden='true'>&raquo;</span></a></li>";
            numPage += "</ul>";
            return numPage;
        }
        else
        {
            return "no records found";
        }
    }
}
}

You can used in your controller like the below:

Paging pg = new Paging();
private projectEntities db = new projectEntities();

//ex : Controller name-> news , view_name -> browse
public ActionResult Index()
    {
        int offset = 1;
        int Page = 1;
        int Take = 20;
        if (Convert.ToInt32(Request.QueryString["Page"]) > 1)
        {
            Page = Convert.ToInt32(Request.QueryString["Page"]);
        }

        int skip = 0;
        if (Page == 1)
            skip = 0;
        else
            skip = ((Page - 1) * Take);
        int total = db.Table_Name.Count();
        var data = db.Table_Name.Skip(skip).Take(Take);
        string paging = pg.Pagination(total, Page, Take, offset, "news", "/browse", "");
        ViewBag.Paging = paging;
        return View(data.ToList());
    }

After that you can call it in the view like this:

@model IEnumerable<project.Models.project>
@{
    ViewBag.Title = "News";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="container">

    <table class="table table-striped">
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.field_name)
            </th>
        </tr>

        @foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.field_name)
            </td>
        </tr>
    }

</table>
@Html.Raw(ViewBag.Paging)