C# MVC分页查询显示

MVC如何进行分页查询显示

一般情况下,我们显示一张表的内容是直接全部显示,但是这样的方法做出来的效果非常不美观,而且在数据量特别大的情况下,会显得页面内容非常杂乱。所以,我们使用了分页,分页不仅可以使你的页面内容变得十分简洁美观,而且还支持只对指定内容进行显示。下面是常用的4种分页显示方法。

  1. 方法一,对指定行数进行分页查询显示
//控制器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using chuanzhi.Models;
namespace chuanzhi.Controllers
{
    public class DepartmentController : Controller
    {
        TestDB5Entities db = new TestDB5Entities();
        // GET: Department
        public ActionResult Index()
        {
            //查询部门表第2页,每页显示5条,相当于显示第6-10条数据
            var departments = db.Departments
                .OrderBy(p=>p.ID)//按照ID排序
                .Skip(5)//跳过前面5条
                .Take(5)//每页显示5条
                .ToList()
            return View(departments);
        }
    }
}
//视图
@{
    ViewBag.Title = "Index";
}
@using chuanzhi.Models;
@model List<Department>
<h2>部门列表</h2>
<table class="table table-bordered">
    <thead>
        <tr>
            <th>编号</th>
            <th>名称</th>
            <th>备注</th>
        </tr>   
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
        <tr>
            <td>@item.ID</td>
            <td>@item.Name</td>
            <td>@item.Remark</td>
        </tr>         
        }
    </tbody>
</table>

  1. 方法二,查询所有数据并按照每页显示指定行数进行分页。
//控制器代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using chuanzhi.Models;
namespace chuanzhi.Controllers
{
    public class DepartmentController : Controller
    {
        TestDB5Entities db = new TestDB5Entities();
        // GET: Department
        public ActionResult Index(int pageIndex=1,int pageSize=10)
        {
            //查询总记录数
            var totalRows = db.Departments.Count();
            //计算总页数
            var pageCount = Math.Ceiling(totalRows*1.0 / pageSize);               
            ViewBag.pageCount = pageCount;//控制器向视图传值
            ViewBag.pageIndex = pageIndex;//控制器向视图传值
            //查询第pageIndex页,每页显示pageSize条
            var departments = db.Departments
                .OrderBy(p=>p.ID)//按照ID排序
                .Skip((pageIndex-1)*pageIndex)//显示第几页
                .Take(pageSize)//每页显示pageSize条
                .ToList();
            return View(departments);
        }
    }
}
//视图代码
@{
    ViewBag.Title = "Index";
}
@using chuanzhi.Models;
@model List<Department>
<h2>部门列表</h2>
<table class="table table-bordered">
    <thead>
        <tr>
            <th>编号</th>
            <th>名称</th>
            <th>备注</th>
        </tr>   
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
        <tr>
            <td>@item.ID</td>
            <td>@item.Name</td>
            <td>@item.Remark</td>
        </tr>         
        }
    </tbody>
</table>
<nav class="pager">
    <ul>
        <li>共 @ViewBag.PageCount 页</li>
        <li>当前为:第 @ViewBag.PageIndex 页</li>
    </ul>
</nav>
  1. 方法三,建立视图模型进行分页
//分页显示方法3,建立视图模型
//控制器
using System.Web;
using System.Web.Mvc;
using chuanzhi.Models;
using chuanzhi.Models.ViewModel;
namespace chuanzhi.Controllers
{
    public class DepartmentController : Controller
    {
        TestDB5Entities db = new TestDB5Entities();
        // GET: Department
        public ActionResult Index(int pageIndex=1,int pageSize=5)
        {
            //查询总页数
            var totalRows = db.Departments.Count();
            //计算总页数
            var pageCount = Math.Ceiling(totalRows*1.0 / pageSize);
            //查询第pageIndex页,每页显示pageSize条
            var departments = db.Departments
                .OrderBy(p=>p.ID)//按照ID排序
                .Skip((pageIndex-1)*pageIndex)//显示第几页
                .Take(pageSize)//每页显示pageSize条
                .ToList();
            ViewPageModel viewPageModel = new ViewPageModel()
            {
                Departments = departments,
                PageCount = pageCount,
                PageIndex = pageIndex
            };
            return View(viewPageModel);
        }
    }
}
//视图
@{
    ViewBag.Title = "Index";
}
@using chuanzhi.Models.ViewModel;
@model ViewPageModel
<h2>部门列表</h2>
<table class="table table-bordered">    
    <thead>
        <tr>
            <th>编号</th>
            <th>名称</th>
            <th>备注</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.Departments)
        {
            <tr>
                <td>@item.ID</td>
                <td>@item.Name</td>
                <td>@item.Remark</td>
            </tr>
        }
    </tbody>
</table>
<nav class="pager">
    <ul>
        <li>共 @Model.PageCount 页</li>
        <li>当前为:第 @Model.PageIndex 页</li>
    </ul>
</nav>

  1. 方法四,对多个表进行分页,使用泛型集合。比如对教师和部门表进行分页。
//先建立一个视图模型类ViewPageModel
//ViewPageModel
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace chuanzhi.Models.ViewModel
{
    public class ViewPageModel<T> where
        T:class//T表示预留出来的类,不能事先指定,只能在使用的时候指定
    {
        public int PageIndex { get; set; }
        public Double PageCount { get; set; }
        public List<T> Models { get; set; }
    }
}
//部门表控制器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using chuanzhi.Models;
using chuanzhi.Models.ViewModel;
namespace chuanzhi.Controllers
{
    public class DepartmentController : Controller
    {
        TestDB5Entities db = new TestDB5Entities();
        // GET: Department
        public ActionResult Index(int pageIndex=1,int pageSize=5)
        {
            //查询总页数
            var totalRows = db.Departments.Count();
            //计算总页数
            var pageCount = Math.Ceiling(totalRows*1.0 / pageSize);      
            //查询第pageIndex页,每页显示pageSize条
            var departments = db.Departments
                .OrderBy(p=>p.ID)//按照ID排序
                .Skip((pageIndex-1)*pageIndex)//显示第几页
                .Take(pageSize)//每页显示pageSize条
                .ToList();
        ViewPageModel<Department> viewPageModel = new ViewPageModel<Department>()
            {
                Models = departments,
                PageCount = pageCount,
                PageIndex = pageIndex
            };
            return View(viewPageModel);  
        }
    }
}
//部门表视图
@{
    ViewBag.Title = "Index";
}
@using chuanzhi.Models
@using chuanzhi.Models.ViewModel;
@model ViewPageModel<Department>
<h2>部门列表</h2>
<table class="table table-bordered">
    <thead>
        <tr>
            <th>编号</th>
            <th>名称</th>
            <th>备注</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.Models)
        {
            <tr>
                <td>@item.ID</td>
                <td>@item.Name</td>
                <td>@item.Remark</td>
            </tr>
        }
    </tbody>
</table>
<nav class="pager">
    <ul>
        <li>共 @Model.PageCount 页</li>
        <li>当前为:第 @Model.PageIndex 页</li>
    </ul>
</nav>

//教师表控制器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using chuanzhi.Models;
using chuanzhi.Models.ViewModel;
namespace chuanzhi.Controllers
{
    public class TeacherController : Controller
    {
        TestDB5Entities db = new TestDB5Entities();
        // GET: Department
        public ActionResult Index(int pageIndex = 1, int pageSize = 5)
        {
            //查询总页数
            var totalRows = db.Teachers.Count();
            //计算总页数
            var pageCount = Math.Ceiling(totalRows * 1.0 / pageSize);
            
            //查询第pageIndex页,每页显示pageSize条
            var teachers = db.Teachers
                .OrderBy(p => p.ID)//按照ID排序
                .Skip((pageIndex - 1) * pageIndex)//显示第几页
                .Take(pageSize)//每页显示pageSize条
                .ToList();
            ViewPageModel<Teacher> viewPageModel = new ViewPageModel<Teacher>()
            {
                Models = teachers,
                PageCount = pageCount,
                PageIndex = pageIndex
            };
            return View(viewPageModel);
        }
    }
}
//教师表视图
@{
    ViewBag.Title = "Index";
}

@using chuanzhi.Models
@using chuanzhi.Models.ViewModel;
@model ViewPageModel<Teacher>
<h2>教师列表</h2>
<table class="table table-bordered">
    <thead>
        <tr>
            <th>编号</th>
            <th>名称</th>
            <th>备注</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.Models)
        {
            <tr>
                <td>@item.ID</td>
                <td>@item.Name</td>
                <td>@item.Remark</td>
            </tr>
        }
    </tbody>
</table>
<nav class="pager">
    <ul>
        <li>共 @Model.PageCount 页</li>
        <li>当前为:第 @Model.PageIndex 页</li>
    </ul>
</nav>

猜你喜欢

转载自blog.csdn.net/weixin_47258773/article/details/105771303
今日推荐