Ejemplo n.º 1
0
        // 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));
        }