Friday, February 6, 2015

PagedList - I

namespace EFCF.Models
{
    public class Person
    {
        public int ID { getset; }
        public string Name { getset; }
        public string City { getset; }
        public string State { getset; }
 
    }
}
 ****** CONTROLLER ********
public ActionResult Index(string sortOrder, string CurrentSort, int? page)
        {
            int pageSize = 10;
            int pageIndex = 1;
            pageIndex = page.HasValue ? Convert.ToInt32(page) : 1;
 
            ViewBag.CurrentSort = sortOrder;
            sortOrder = String.IsNullOrEmpty(sortOrder) ? "ID" : sortOrder;
 
             var  personlist = from s in  GetPerson() select s; 
 
            switch (sortOrder)
            {
                case "ID":
                    if (sortOrder.Equals(CurrentSort))
                        personlist = personlist.OrderByDescending(m => m.ID).ToPagedList(pageIndex, pageSize);
                    else
                        personlist = personlist.OrderBy
                                (m => m.ID).ToPagedList(pageIndex, pageSize);
                    break;
                case "Name":
                    if (sortOrder.Equals(CurrentSort))
                        personlist = personlist.OrderByDescending
                                (m => m.Name).ToPagedList(pageIndex, pageSize);
                    else
                        personlist = personlist.OrderBy
                                (m => m.Name).ToPagedList(pageIndex, pageSize);
                    break;
                case "City":
                    if (sortOrder.Equals(CurrentSort))
                        personlist = personlist.OrderByDescending
                                (m => m.Name).ToPagedList(pageIndex, pageSize);
                    else
                        personlist = personlist.OrderBy
                                (m => m.Name).ToPagedList(pageIndex, pageSize);
                    break;
 
                case "State":
                    if (sortOrder.Equals(CurrentSort))
                        personlist = personlist.OrderByDescending
                                (m => m.Name).ToPagedList(pageIndex, pageSize);
                    else
                        personlist = personlist.OrderBy
                                (m => m.Name).ToPagedList(pageIndex, pageSize);
                    break;
 
                 
            }
            return View(personlist);
        }
 
 
        public IList<Person> GetPerson()
        {
            IList<Person> list = new List<Person>();
 
 
            for (int i = 1; i <= 50; i++)
            {
                Person p = new Person();
                p.ID = i;
                p.Name = "Test" + i;
                p.City = "City" + i;
                p.State = "State" + i;
                list.Add(p);
            }
            return list; 
        }
 
 
******** VIEW INDEX.CSHTML *********

@model PagedList.IPagedList<EFCF.Models.Person>
@using PagedList.Mvc;
 
@{
    ViewBag.Title = "Index";
}
 
<h2>Index</h2>
 
<p>
    @Html.ActionLink("Create New""Create")
</p>
<link href="~/Content/PagedList.css" rel="stylesheet" />
@using (Html.BeginForm())
{ 
    <table>
        <tr>
            <th style="border2px solid blacktext-aligncenterwidth12%">
                @* @Html.ActionLink("Name", "Index", new { sortOrder = "Name", CurrentSort = ViewBag.CurrentSort })*@
                @Html.DisplayNameFor(model => model.First().Name)
            </th>
            <th style="border2px solid blacktext-aligncenterwidth12%">
                @Html.ActionLink("City""Index"new { sortOrder = "City", CurrentSort = ViewBag.CurrentSort })
            </th>
            <th style="border2px solid blacktext-aligncenterwidth12%">
                @Html.ActionLink("State""Index"new { sortOrder = "State", CurrentSort = ViewBag.CurrentSort })
            </th>
            <th style="border2px solid blacktext-aligncenterwidth12%"></th>
        </tr>
 
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Name)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.City)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.State)
                </td>
                <td>
                    @Html.ActionLink("Edit""Edit"new { id = item.ID }) |
                    @Html.ActionLink("Details""Details"new { id = item.ID }) |
                    @Html.ActionLink("Delete""Delete"new { id = item.ID })
                </td>
            </tr>
        }
 
        <tr>
            <td colspan="4">
                @*<div id='Paging'>*@
                Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
                @Html.PagedListPager(Model, page => Url.Action("Index"new { page }), PagedListRenderOptions.ClassicPlusFirstAndLast)
                @*</div>*@
            </td>
        </tr>
    </table>

0 comments:

Post a Comment

Twitter Delicious Facebook Digg Stumbleupon Favorites More