MVC如何进行分页查询显示
一般情况下,我们显示一张表的内容是直接全部显示,但是这样的方法做出来的效果非常不美观,而且在数据量特别大的情况下,会显得页面内容非常杂乱。所以,我们使用了分页,分页不仅可以使你的页面内容变得十分简洁美观,而且还支持只对指定内容进行显示。下面是常用的4种分页显示方法。
- 方法一,对指定行数进行分页查询显示
//控制器
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>
- 方法二,查询所有数据并按照每页显示指定行数进行分页。
//控制器代码
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>
- 方法三,建立视图模型进行分页
//分页显示方法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>
- 方法四,对多个表进行分页,使用泛型集合。比如对教师和部门表进行分页。
//先建立一个视图模型类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>