The following is my data table in design mode from which I am showing a record in a MVC 4 application:

table
Image 1.

  1. CREATE TABLE [dbo].[Employee](
  2. [Emp_ID] [int] IDENTITY(1,1) NOT NULL,
  3. [Name] [varchar](50) NULL,
  4. [Email] [varchar](500) NULL,
  5. [Designation] [varchar](50) NULL,
  6. [City] [varchar](50) NULL,
  7. [State] [varchar](50) NULL,
  8. [Country] [varchar](50) NULL,
  9. CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED
  10. (
  11. [Emp_ID] ASC
  12. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
  13. ) ON [PRIMARY]
  14. GO
The following is my data in my table:

Data in my Table
Image 2.

Now create a new MVC 4 application using Visual Studio as in the following:

application
Image 3.

Select Internet application.

Now right-click on your project in Solution Explorer then select Manage NuGet Packages.

Manage NuGet Packages
Image 4.

uGet Packages
Image 5.

Packages
Image 6.

Now again right-click on your project in Solution Explorer then click on ADD New ADO.NET Entity Data Model.

Entity Data Model
Image 7.

Model
Image 8.

new connection
Image 9.

select database
Image 10.

choose your data connection
Image 11.

select table
Image 12.

properties
Image 13.

Now add a new Controller Name as Employee as in the following:

Controller
Image 14.

Place the following code in Employee Controller:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using PagedList;
  7. namespace pagingNSortingInMVC4.Controllers
  8. {
  9. public class EmployeeController : Controller
  10. {
  11. //
  12. // GET: /Employee/
  13. EmployeeManagementEntities obj;
  14. public EmployeeController()
  15. {
  16. obj = new EmployeeManagementEntities();
  17. }
  18. public ActionResult Index(string sortOrder, string CurrentSort, int? page)
  19. {
  20. int pageSize = 5;
  21. int pageIndex = 1;
  22. pageIndex = page.HasValue ? Convert.ToInt32(page) : 1;
  23. ViewBag.CurrentSort = sortOrder;
  24. sortOrder = String.IsNullOrEmpty(sortOrder) ? "Emp_ID" : sortOrder;
  25. IPagedList<Employee> emp = null;
  26. switch (sortOrder)
  27. {
  28. case "Emp_ID":
  29. if (sortOrder.Equals(CurrentSort))
  30. emp = obj.Employee.OrderByDescending
  31. (m => m.Emp_ID).ToPagedList(pageIndex, pageSize);
  32. else
  33. emp = obj.Employee.OrderBy
  34. (m => m.Emp_ID).ToPagedList(pageIndex, pageSize);
  35. break;
  36. case "Emp_Name":
  37. if (sortOrder.Equals(CurrentSort))
  38. emp = obj.Employee.OrderByDescending
  39. (m => m.Name).ToPagedList(pageIndex, pageSize);
  40. else
  41. emp = obj.Employee.OrderBy
  42. (m => m.Name).ToPagedList(pageIndex, pageSize);
  43. break;
  44. case "Email":
  45. if (sortOrder.Equals(CurrentSort))
  46. emp = obj.Employee.OrderByDescending
  47. (m => m.Email).ToPagedList(pageIndex, pageSize);
  48. else
  49. emp = obj.Employee.OrderBy
  50. (m => m.Email).ToPagedList(pageIndex, pageSize);
  51. break;
  52. case "Designation":
  53. if (sortOrder.Equals(CurrentSort))
  54. emp = obj.Employee.OrderByDescending
  55. (m => m.Designation).ToPagedList(pageIndex, pageSize);
  56. else
  57. emp = obj.Employee.OrderBy
  58. (m => m.Designation).ToPagedList(pageIndex, pageSize);
  59. break;
  60. case "City":
  61. if (sortOrder.Equals(CurrentSort))
  62. emp = obj.Employee.OrderByDescending
  63. (m => m.City).ToPagedList(pageIndex, pageSize);
  64. else
  65. emp = obj.Employee.OrderBy
  66. (m => m.City).ToPagedList(pageIndex, pageSize);
  67. break;
  68. case "State":
  69. if (sortOrder.Equals(CurrentSort))
  70. emp = obj.Employee.OrderByDescending
  71. (m => m.State).ToPagedList(pageIndex, pageSize);
  72. else
  73. emp = obj.Employee.OrderBy
  74. (m => m.State).ToPagedList(pageIndex, pageSize);
  75. break;
  76. case "Country":
  77. if (sortOrder.Equals(CurrentSort))
  78. emp = obj.Employee.OrderByDescending
  79. (m => m.Country).ToPagedList(pageIndex, pageSize);
  80. else
  81. emp = obj.Employee.OrderBy
  82. (m => m.Country).ToPagedList(pageIndex, pageSize);
  83. break;
  84. case "Default":
  85. emp = obj.Employee.OrderBy
  86. (m => m.Emp_ID).ToPagedList(pageIndex, pageSize);
  87. break;
  88. }
  89. return View(emp);
  90. }
  91. }
  92. }
Now add a View:

add a View
Image 15.

Place the following code in Index.cshtml:
  1. @model PagedList.IPagedList<pagingNSortingInMVC4.Employee>
  2. @using PagedList.Mvc;
  3. @{
  4. ViewBag.Title = "Employee List";
  5. Layout = "~/Views/Shared/_Layout.cshtml";
  6. }
  7. <h2>Employee List</h2>
  8. @using (Html.BeginForm())
  9. {
  10. <table>
  11. <tr>
  12. <th style="border: 2px solid black; text-align: center; width: 12%">
  13. @Html.ActionLink("Employee ID", "Index",
  14. new { sortOrder = "Emp_ID", CurrentSort = ViewBag.CurrentSort })
  15. </th>
  16. <th style="border: 2px solid black; text-align: center; width: 25%">
  17. @Html.ActionLink("Employee Name", "Index",
  18. new { sortOrder = "Emp_Name", CurrentSort = ViewBag.CurrentSort })
  19. </th>
  20. <th style="border: 2px solid black; text-align: center; width: 15%;">
  21. @Html.ActionLink("Email", "Index",
  22. new { sortOrder = "Email", CurrentSort = ViewBag.CurrentSort })
  23. </th>
  24. <th style="border: 2px solid black; text-align: center; width: 10%;">
  25. @Html.ActionLink("Designation", "Index",
  26. new { sortOrder = "Designation", CurrentSort = ViewBag.CurrentSort })
  27. </th>
  28. <th style="border: 2px solid black; text-align: center; width: 10%;">
  29. @Html.ActionLink("City", "Index",
  30. new { sortOrder = "City", CurrentSort = ViewBag.CurrentSort })
  31. </th>
  32. <th style="border: 2px solid black; text-align: center; width: 10%;">
  33. @Html.ActionLink("State", "Index",
  34. new { sortOrder = "State", CurrentSort = ViewBag.CurrentSort })
  35. </th>
  36. <th style="border: 2px solid black; text-align: center; width: 10%;">
  37. @Html.ActionLink("Country", "Index",
  38. new { sortOrder = "Country", CurrentSort = ViewBag.CurrentSort })
  39. </th>
  40. </tr>
  41. @foreach (var item in Model)
  42. {
  43. <tr>
  44. <td style="border: 2px solid black; text-align: center; word-wrap: break-word;">
  45. @Html.DisplayFor(modelItem => item.Emp_ID)
  46. </td>
  47. <td style="border: 2px solid black; text-align: center; word-wrap: break-word;">
  48. @Html.DisplayFor(modelItem => item.Name)
  49. </td>
  50. <td style="border: 2px solid black; text-align: center; word-wrap: break-word;">
  51. @Html.DisplayFor(modelItem => item.Email)
  52. </td>
  53. <td style="border: 2px solid black; text-align: center; word-wrap: break-word;">
  54. @Html.DisplayFor(modelItem => item.Designation)
  55. </td>
  56. <td style="border: 2px solid black; text-align: center; word-wrap: break-word;">
  57. @Html.DisplayFor(modelItem => item.City)
  58. </td>
  59. <td style="border: 2px solid black; text-align: center; word-wrap: break-word;">
  60. @Html.DisplayFor(modelItem => item.State)
  61. </td>
  62. <td style="border: 2px solid black; text-align: center; word-wrap: break-word;">
  63. @Html.DisplayFor(modelItem => item.Country)
  64. </td>
  65. </tr>
  66. }
  67. </table>
  68. <br />
  69. <div id='Paging' style="text-align: center">
  70. Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber)
  71. of @Model.PageCount
  72. @Html.PagedListPager(Model, page => Url.Action("Index", new { page }))
  73. </div>
  74. }
Now run your application as in the following:

Run your Application
Image 16.

Now do paging:

Now do paging
Image 17.

Now do sorting:

Now do sorting
Image 18.

sorting
Image 19.

designation
Image 20.