MVC分页代码

分页的功能可以用sql的存储过程完成,但实际上,在sql中生成的存储过程引用到EF模型中以后,也就是一个方法。那么,我们在项目中,在DAL层直接做成一个方法就可以了。
效果(我做的每页显示1行):
第一页是没有上一页的
在这里插入图片描述
在这里插入图片描述

分页万能公式:(页码-1)*行数

DAL层代码:

 /// <summary>
        /// 分页
        /// </summary>
        /// <param name="pageSize">行数</param>
        /// <param name="pageIndex">页码</param>
        /// <param name="pageCount>总页数</param>
        /// <returns>集合和总页数</returns>
        public static List<Student> Select(int pageSize,int pageIndex,out int pageCount)
        {
            using (ExamDBEntities db = new ExamDBEntities())
            {
                var stus = db.Student;//只是查询,并没有使用数据。
                pageCount = (int)Math.Ceiling(stus.Count() * 1.0 / pageSize);
                return stus.OrderBy(p => p.StuID).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
            }
        }

要注意,pageCount形参要带out关键字,具体out关键字什么用处可以自己百度。只需要记住,调用的时候,不管是形参还是实参都需要加out关键字,否则无法识别。

BLL层:略。

控制器代码:

//调用操作方法时传参,因为做上一页下一页时,需要传参
        public ActionResult Index(int pageSize=1,int pageIndex=1)
        {
            int pageCount = 0;
            var stus = StudentManager.GetStuByPage(pageSize, pageIndex, out pageCount);
            ViewBag.pSize = pageSize;
            ViewBag.pIndex = pageIndex;
            ViewBag.pCount = pageCount;//因为DAL里面return了list,就没办法再return一个int的pageCount,所以用out很关键
            return View(stus);//前台用强类型遍历
        }

view代码:

<div>
    <span>共 @ViewBag.pCount 页</span>
    <span><input type="text" id="pageIndex" onblur="pageIndex" value="@ViewBag.pIndex" style="width:15px;text-align:center" /></span>
    @{
        if (ViewBag.pIndex == 1)
        {
            @Html.ActionLink("下一页", "Index", new { pageSize = ViewBag.pSize, pageIndex = ViewBag.pIndex + 1 })
        }
        else if (ViewBag.pIndex == ViewBag.pCount)
        {
            @Html.ActionLink("上一页", "Index", new { pageSize = ViewBag.pSize, pageIndex = ViewBag.pIndex - 1 })
        }
        else
        {
            @Html.ActionLink("上一页", "Index", new { pageSize = ViewBag.pSize, pageIndex = ViewBag.pIndex - 1 })
            @Html.ActionLink("下一页", "Index", new { pageSize = ViewBag.pSize, pageIndex = ViewBag.pIndex + 1 })
        }
    }
</div>

要考虑一下什么时候上一页/下一页是没有的,什么时候是两个都要有的

前台script代码:


<script src="~/Scripts/jquery-3.3.1.min.js"></script>
<script type="text/javascript">
    $("#pageIndex").blur(function () {
        var aa = $("#pageIndex").val();
        $.ajax({
            url: "/Students/Index",
            type: "post",
            data: { "pageIndex": aa },
            success: function (data) {
                if (data != null) {
                    $("#stus").html(data);
                }
            }
        })
    })
</script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MVC2 MvcPager分页源码 项目描述: MvcPager分页控件是在ASP.NET MVC Web应用程序中实现分页功能的一系列扩展方法,该分页控件的最初的实现方法借鉴了网上流行的部分源代码,尤其是ScottGu的PagedList类和相关方法,经过不断完善和改进后推出的比较成熟而且功能强大的ASP.NET MVC分页解决方案。 MvcPager主要功能有: 1.实现最基本的url route分页; 2.支持手工输入或选择页索引并对输入的页索引进行有效性验证; 3.支持使用ASP.NET MVC Ajax默认的MicrosoftAjax和MicrosoftMvcAjax客户端脚本库实 现Ajax分页; 4.支持使用jQuery实现Ajax分页,生成的Html代码更精简; 5.支持Ajax分页模式下,若客户端浏览器不支持或禁用Javascript功能时安全降级为普通 分页 6.搜索引擎友好,无论是普通分页还是Ajax分页,搜索引擎都可以直接搜索到所有页面。 7.支持ASP.NET MVC 1.0、2.0和3.0 版本; 8.支持IE、Firefox、Opera、Chrome及Safari等常用浏览器; What's new: 1、遵循xhtml标准(去除javascript标签的language属性); 2、添加PagerOptions.MaxPageIndex属性,允许限制显示的总页数; 3、修正了PageIndexParameterName区分大小写的bug; 4、允许部分受信任的调用方访问MvcPager; 5、unobtrusive Ajax支持(仅限ASP.NET MVC 3); 6、修正了jQuery Ajax分页时生成的url中重复出现x-requested-width=的bug; 7、增加IPagedList 接口,HtmlHelper.Pager、HtmlHelper.AjaxPager和Ajax.Pager扩展方法第一个参数改为IPagedList,不再是PagedList; 8、修正了页索引文本或下拉框跳转脚本针对不同浏览器的兼容问题; 9、代码精简优化; 1.5版完全兼容1.4版,升级时无需改动任何代码分页源码在src_51aspx文件夹中,代码如果需要商用请浏览作者个人控件,有详细说明。 数据库需要SQL2008 R2的支持!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值