1)什么是分页查询
分页查询,是一种操作系统bai里存du储器管理的一种技术,可以使电脑zhi的主存可以使用存储在辅助存储器中的dao数据。操作系统会将辅助存储器(通常是磁盘)中的数据分区成固定大小的区块,称为“页”(pages)。当不需要时,将分页由主存(通常是内存)移到辅助存储器;当需要时,再将数据取回,加载主存中。相对于分段,分页允许存储器存储于不连续的区块以维持文件系统的整齐。分页是磁盘和内存间传输数据块的最小单位。
2)分页实例
首先新建一个数据库(RbacDB),并建一个表(Roles),如图所示:
在MVC中添加实体EF框架
RbacDBEntities db = new RbacDBEntities();
视图分页左边代码,如下所示
<ul class="pagination">
<li class="page-item">
共<label>@ViewBag.pageIndexs</label>页,第<input style="width:50px;" type="text" value="@ViewBag.pageIndex" id="pageIndex" />页,每天显示
<select id="pageSize" onchange="go(1);">
@{
var pageindexs = new List<int> { 5, 10, 20, 50, 100 };
}
@foreach (var item in pageindexs)
{
if (ViewBag.pageSize == item)
{
<option value="@item" selected="selected">@item</option>
}
else
{
<option value="@item">@item</option>
}
}
</select>条
</li>
</ul>
视图分页右边代码,如下所示
<ul class="pagination">
<li class="page-item">
<a class="page-link" href="/role/index?pageIndex=1">首页</a>
</li>
<li class="page-item">
@if (@ViewBag.pageIndex > 0)
{
<a class="page-link" href="/role/index?pageIndex=@(ViewBag.pageIndex-1)&pageSize=@ViewBag.pageSize&name=@ViewBag.name">上页</a>
}
</li>
<li class="page-item">
<a class="page-link" href="/role/index?pageIndex=@(ViewBag.pageIndex+1)&pageSize=@ViewBag.pageSize&name=@ViewBag.name">下页</a>
</li>
<li class="page-item">
<a class="page-link" href="/role/index?pageIndex=@ViewBag.pageIndexs">末页</a>
</li>
<li class="page-item">
<input type="button" class="btn btn-danger" value="跳转" onclick="go(1);" />
</li>
</ul>
视图js代码,如下所示
@section scripts{
<script type="text/javascript">
function go(pageindex) {
var pageindex = $("#pageIndex").val();
var pageSize = $("#pageSize").val();
var txtCondName = $("#txtCondName").val();
window.location.href = "/role/index?pageindex=" + pageindex + "&pageSize=" + pageSize + "&name=" + txtCondName
}
</script>
}
控制器代码,如下所示
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Com.Zhou.EF.Models;
namespace Com.Zhou.EF.Controllers
{
public class RoleController : Controller
{
RbacDBEntities db = new RbacDBEntities();
// GET: Role
public ActionResult Index(int pageIndex=1,int pageSize=5,string Name="")
{
//求总记录数
var pageCount = db.Roles.Where(p=> (p.Name == "" || p.Name.Contains(Name))).Count();
//求总页数
var pageIndexs = Math.Ceiling((pageCount*1.0/pageSize));
ViewBag.pageIndexs = pageIndexs; //总页数
ViewBag.pageIndex = pageIndex; //当前页数
ViewBag.pageSize = pageSize; //页码
ViewBag.name = Name; //名称
ViewBag.pageCount = pageCount; //总记录数
//分页
var roles = db.Roles
.Where(p=>(p.Name==""||p.Name.Contains(Name)))
.OrderBy(p => p.ID)
.Skip(pageSize * (pageIndex - 1))
.Take(pageSize)
.ToList();
return View(roles);
}
}
}