ContosoUniversity.Controllers.StudentController.Index C# (CSharp) Method

Index() public method

public Index ( string sortOrder, string currentFilter, string searchString, int page ) : System.Web.Mvc.ViewResult
sortOrder string
currentFilter string
searchString string
page int
return System.Web.Mvc.ViewResult
        public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page)
        {
            ViewBag.CurrentSort = sortOrder;
            ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
            ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date";

            if (searchString != null)
            {
                page = 1;
            }
            else
            {
                searchString = currentFilter;
            }

            ViewBag.CurrentFilter = searchString;

            var students = from s in db.Students
                           select s;
            if (!String.IsNullOrEmpty(searchString))
            {
                students = students.Where(s => s.LastName.Contains(searchString)
                                       || s.FirstMidName.Contains(searchString));
            }
            switch (sortOrder)
            {
                case "name_desc":
                    students = students.OrderByDescending(s => s.LastName);
                    break;
                case "Date":
                    students = students.OrderBy(s => s.EnrollmentDate);
                    break;
                case "date_desc":
                    students = students.OrderByDescending(s => s.EnrollmentDate);
                    break;
                default:  // Name ascending
                    students = students.OrderBy(s => s.LastName);
                    break;
            }

            int pageSize = 3;
            int pageNumber = (page ?? 1);
            return View(students.ToPagedList(pageNumber, pageSize));
        }

Usage Example

        public void Can_Index_Search()
        {
            Mock<IUnitOfWork> mock = new Mock<IUnitOfWork>();
            mock.Setup(s => s.StudentRepo.GetStudentQueryable()).Returns(studentsList.AsQueryable());

            StudentController controller = new StudentController(mock.Object);

            IEnumerable<Student> resutl = (IEnumerable<Student>)controller.Index("Name_desc", "J", null, null).Model;

            Student[] student = resutl.ToArray();

            Assert.AreEqual(student[0].FirstMidName, "Jan");
            Assert.AreEqual(student[1].FirstMidName, "John");
        }