MVC+EF中分页代码的实现

本文介绍了如何在MVC应用中结合Entity Framework实现分页功能。首先需要在数据库创建分页存储过程,然后更新EF以包含新存储过程。接着在路由配置中添加新的路由路径,接着在DAL层和BLL层编写分页方法,再在控制器中实现相关逻辑,最后在视图中添加控件和JS脚本来展示分页效果。
摘要由CSDN通过智能技术生成

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();	//将其转换成数组
            }
        }
  1. 去到你的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>&nbsp;</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. 最后的话也就是完成了简单的分页功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值