// GET: Students public async Task <IActionResult> Index (string sortOrder, string SearchStudents, int?page, string CurrentStudent, string logo) { //姓名排序参数 ViewData["Name_Sort_Parm"] = string.IsNullOrEmpty(sortOrder) ? "name desc" : ""; //时间排序参数 ViewData["Date_Sort_Parm"] = sortOrder == "date" ? "date desc" : "date"; //搜索参数 ViewData["SearchStudents"] = SearchStudents; //判断搜索学生是否为空如果不为空则表示进行搜索,所以将页号定位到1 if (SearchStudents != null) { page = 1; } else { //如果为空,则会出现没有搜索和搜索中翻页两种情况 //没有搜索的话两个参数都为空,不会影响到结果 //搜索中翻页的话则视图只能传递CurrentStudent参数所以赋值给SearchStudents, //使其筛选出合适的数据供CreatePagng进行偏移量操作 SearchStudents = CurrentStudent; } //读取出整张表 var students = from Student in _context.Students select Student; #region 搜索和排序功能 //先做筛选,否则会影响到排序和翻页(偏移量操作) if (!string.IsNullOrWhiteSpace(SearchStudents)) { students = students.Where(a => a.RealName.Contains(SearchStudents)); //每次搜索时将搜索学生设置为当前学生 ViewData["CurrentStudent"] = SearchStudents; } //在做排序,否则影响翻页。 //排序分为排序,排序翻页,筛选排序翻页 //第一种sortOrder会将值传递回来则直接进行排序 //第2 3中不会传递sortOrder因为一次sortOrder到后台时都是会变化的取决于姓名排序参数和时间排序参数 //所以当第一次排序时,将排序方式用logo记录下来并传递到view,前台翻页时传递logo,根据logo完成原来的排序,此时sortOrder为null if (sortOrder != null) { students = Sort(sortOrder, students); } else { students = Sort(logo, students); } #endregion //设定每页的大小 int PageSize = 3; //读出筛选后的所有数据 var entities = students.AsNoTracking(); //这个类以继承list方式组成1个list+4个属性的数据结构,存放相关数据 var dtos = await PaginatedList <Student> .CreatePagng(entities, page ?? 1, PageSize); //var dtos = await students.ToListAsync(); //查询出学生表的所有信息 return(View(dtos)); }