MVC中分页代码的实现
首先的话需要在数据库编写一个分页的存储过程
SQL中分页代码的编写详情见:https://blog.csdn.net/AriaWXY/article/details/105844696
更加完善有选择每一页显示多少行数据和自己输入想去的页码直接跳转的功能
详情见:https://blog.csdn.net/AriaWXY/article/details/105846042
做好准备工作后
PS:如果你是后面新加的存储过程,记得先去更新一下你的EF,将新添加的存储过程加到此EF中。
1. 首先最好的话是去路由中编辑一个新的路由路径
在项中打开我们的App_Start文件夹找到我们的RouteConfig.cs类,打开此文件编辑它。
按照下面的代码添加一个新的路由路径
routes.MapRoute(
name: "Paging",
url: "{controller}/{action}/{pageindex}/{pagesize}",
defaults: new { controller = "Student", action = "Index", pageindex = UrlParameter.Optional ,pagesize= UrlParameter.Optional }
);
2. 去到你的DAL层编写一下跟数据库打交道的分页方法
/// <summary>
/// Student用于分页的代码
/// </summary>
/// <param name="pageindex">查询哪一页</param>
/// <param name="pagesize">每页所显示的个数</param>
/// <param name="pageCount">页的总数目</param>
/// <returns>返回一个List<Student>数组</returns>
public static List<Student> Select(int pageindex, int pagesize, out int pageCount) //out是引用类型用于返回多个值
{
using (ExamDBEntities db = new ExamDBEntities())//自动释放
{
var students = db.Student.Include("Grade"); //从数据库查询到所有的数据
pageCount = (int)Math.Ceiling(students.Count() * 1.0 / pagesize);//其中Math.Ceiling()为向上取整的方法 例如 Math.Ceiling(1.2)得到的结果会为2
return students.OrderBy(s => s.StuID).
Skip(pagesize * (pageindex - 1)) //所需要跳过多少条数据
.Take(pagesize) //表示显示多少条数据
.ToList(); //将其转换成数组
}
}
- 去到你的BLL层业务层编写一个分页方法
//调用一下DAL层代码既可
public static List<Student> GetStudentByPaging(int pageindex,int pagesize, out int pageCount)
{
return StudentService.Select(pageindex,pagesize,out pageCount);
}
4. 去到我们的控制器编写一下控制器中的你所需要显示分页的方法
//调用你的BLL层代码
public ActionResult Index(int pageindex =1,int pagesize = 4) //首先的话我们需要给定一个初始值,不然的话页面将会显示不了
{
var pageCount = 0;
var student = StudentManager.GetStudentByPaging(pageindex,pagesize,out pageCount);
ViewBag.pageCount = pageCount; //传值到视图界面
ViewBag.pageindex = pageindex;
ViewBag.pagesize = pagesize;
return View(student.ToList()); //将你所查询到的对象返回到视图界面
}
5. 最后的话也就是视图界面,在基础的数据显示界面添加一些控件和编写一些js脚本既可(其中利用了HTML辅助方法和Razor语法)
@{
var pageIndex = (int)ViewBag.pageindex;
var pageCount = (int)ViewBag.pageCount;
var pageSize = (int)ViewBag.pagesize;
}
<div style="float:left;margin-left:20%;">
<span>第 @ViewBag.pageindex 页</span>
@if (pageIndex <= 1)
{
@Html.ActionLink("上一页", "Index", new { pagesize = pageSize, pageindex = pageIndex }, new { disabled = "disabled", @class = "btn btn-primary" })
}
else
{
@Html.ActionLink("上一页", "Index", new { pagesize = pageSize, pageindex = pageIndex - 1 }, new { @class = "btn btn-primary" })
}
<span> </span>
@if (pageIndex >= pageCount)
{
@Html.ActionLink("下一页", "Index", new { pagesize = pageSize, pageindex = pageIndex }, new { disabled = "disabled", @class = "btn btn-primary" })
}
else
{
@Html.ActionLink("下一页", "Index", new { pagesize = pageSize, pageindex = pageIndex + 1 }, new { @class = "btn btn-primary" })
}
<span>共</span><span id="pageCount">@ViewBag.pageCount</span><span>页</span>
</div>
6. 最后的话也就是完成了简单的分页功能