【菜鸟看框架】——MVC+EF实现分页

简介: 【菜鸟看框架】——MVC+EF实现分页


引言


分页这个名词对于现在的我们来说已经非常的熟悉,因为我知道了为什么我会在显示数据的时候采用分页的形式,有人说为了显示的美观,有的人说为了在众多的数据中能容易的找到我们想要的数据等等,这些都是其中的一些原因,但是这些东西我们完全可以用VS自带的控件来实现,也就是所以的假分页,那么假分页和真分页的本质是什么呢?假分页是一次性把所要的数据全部在数据库中查询出来,只是在显示的时候分页显示罢了,这样显然是非常影响性能的,而真分页是每次取每页的数据条数,这样在大数据的时候就能体现出了它的优势。下面来看如何用MVC+EF快速实现分页。


效果展示:


20150619214800419.jpg

一、实现分页的核心代码


我在Model层封装了一个属于自己的HtmlHelper类,里面就承载了我的这部分代码:

    public static HtmlString ShowPageNavigate(this HtmlHelper htmlHelper, int currentPage, int pageSize, int totalCount)  
    {  
        var redirectTo = htmlHelper.ViewContext.RequestContext.HttpContext.Request.Url.AbsolutePath;  
        pageSize = pageSize == 0 ? 3 : pageSize;  
        var totalPages = Math.Max((totalCount + pageSize - 1) / pageSize, 1);//总页数  
        var output = new StringBuilder();  
        if (totalPages > 1)  
        {  
            //if (currentPage!=1)  
            {//处理首页连接  
                output.AppendFormat("<a class='pageLink' href='{0}?pageIndex=1&pageSize={1}'>首页</a>", redirectTo, pageSize);  
            }  
            if (currentPage > 1)  
            {//处理上一页的连接  
                output.AppendFormat("<a class='pageLink' href='{0}?pageIndex=1&pageSize={1}&pageSize={2}'>上一页</a>", redirectTo, currentPage - 1, pageSize);  
            }  
            else  
            {  
                //output.Append("<span class='pageLink'>上一页</span>");  
            }  
            output.Append(" ");  
            int currint = 5;  
            for (int i = 0; i < 10; i++)  
            {//一共最多系那是10个页码,前面5个后面5个  
                if ((currentPage + i -currint) >= 1 && (currentPage + i - currint)<=totalPages)  
                {  
                    if (currint==i)  
                 {//当前页处理  
                        output.AppendFormat("<a class='cpb' href='{0}?pageIndex={1} & pageSize={2}'>{3}</a>",redirectTo,currentPage,pageSize,currentPage);  
                 }  
                    else  
                    {//一般页处理  
                        output.AppendFormat("<a class='cpb' href='{0}?pageIndex={1} & pageSize={2}'>{3}</a>", redirectTo, currentPage + i - currint, pageSize, currentPage + i - currint);  
                    }  
                }  
                output.Append(" ");  
            }  
            if (currentPage < totalPages)  
            {//处理下一页的连接  
                output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1} & pageSize={2}'>下一页</a>", redirectTo, currentPage + 1, pageSize);  
            }  
            else  
            {  
            }  
            output.Append(" ");  
            if (currentPage!=totalPages)  
            {  
                 output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1} & pageSize={2}'>末页</a>", redirectTo, totalPages, pageSize);  
            }  
            output.Append(" ");  
        }  
        output.AppendFormat("第{0}页 / 共{1}页", currentPage, totalPages);//这个统计加不加都行  
        return new HtmlString(output.ToString());  
    }  

二、分页显示的样式代码

    <style type ="text/css">  
        .paginator {  
            font:12px Arial,Helvetica,sans-serif;  
            padding:10px 20px 10px 0;  
            margin:0px;  
        }  
            .paginator a {  
                border:solid 1px #ccc;  
                color:#0063dc;  
                cursor:pointer;  
                text-decoration:none;  
            }  
                .paginator a:visited {  
                    padding:1px 6px;  
                    border:solid 1px #ddd;  
                    background:#fff;  
                    text-decoration:none;                
                }  
            .paginator .cpb {     
                border:1px solid #F50;  
                font-weight:700;  
                color:#F50;  
                background-color:#ffeee5;  
            }  
            .paginator a:hover {  
                border:solid 1px #F50;  
                color:#f60;  
                text-decoration:none;  
            }  
            .paginator a, .paginator a:visited, .paginator .cpb, .paginator a:hover {  
                float:left;  
                height:16px;  
                line-height:16px;  
                min-width:10px;  
                _width:10px;  
                margin-right:5px;  
                text-align:center;  
                white-space:nowrap;  
                font-size:12px;  
                font-family:Arialm,SimSun;  
                padding:0 3px;  
            }  
    </style>  

三、View层代码

<div  class ="paginator">  
    <%:Html.ShowPageNavigate((int)ViewBag.CurrentPage,(int)ViewBag.PageSize,(int)ViewBag.Total) %>  
</div>

四、控制器代码

    public ActionResult Index()  
    {  
        ViewData.Model = db.Province.AsEnumerable();  
        int pageIndex=Request["pageIndex"] == null ? 1 : int.Parse(Request["pageIndex"]);  
        ViewBag.CurrentPage =pageIndex;  
        int pageSize=Request["pageSize"] == null ? 5: int.Parse(Request["pageSize"]);  
        ViewBag.PageSize = pageSize;  
        ViewBag.Total = db.Province.Count();  
        ViewData.Model = db.Province.OrderBy(c => c.provinceID).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();  
        return View();  
    }  


小结


当我在做机房的时候第一次接触到SqlHelper的时候,发现这个东西太好用了,直接给我们省了很多的代码,,当时是比较高兴的(相对我们第一遍机房的时候),然后在图书馆项目中第一次接触到EF实体架构的时候,利用EF+Linq实现D层的操作实在是太无压力了,当时有点震惊的感觉。当接触了MVC+EF的时候,我发现我高兴早了,利用这个技术想实现个对实体的增、删、改、查那就是分分钟钟的事情,现在的编码实在是让我们有一种飞的感觉,其实越是这样我们的基础知识越重要,因为这些封装的非常全的东西,我们只有有了很好的基础知识之后,才能更好的驾驭这些东西,所以在B/S的学习过程中一定要加强基础知识的学习!!!


目录
相关文章
|
24天前
|
前端开发 Java
【案例+源码】详解MVC框架模式及其应用
【案例+源码】详解MVC框架模式及其应用
25 0
|
3月前
|
设计模式 存储 前端开发
MVC 框架的主要问题是什么?
【8月更文挑战第30天】
55 0
|
3月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
113 0
|
5月前
|
安全 前端开发 测试技术
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
|
6月前
|
前端开发 Java Spring
Java Web ——MVC基础框架讲解及代码演示(下)
Java Web ——MVC基础框架讲解及代码演示
56 1
|
6月前
|
前端开发 Java 应用服务中间件
Spring MVC框架概述
Spring MVC 是一个基于Java的轻量级Web框架,采用MVC设计模型实现请求驱动的松耦合应用开发。框架包括DispatcherServlet、HandlerMapping、Handler、HandlerAdapter、ViewResolver核心组件。DispatcherServlet协调这些组件处理HTTP请求和响应,Controller处理业务逻辑,Model封装数据,View负责渲染。通过注解@Controller、@RequestMapping等简化开发,支持RESTful请求。Spring MVC具有清晰的角色分配、Spring框架集成、多种视图技术支持以及异常处理等优点。
78 1
|
6月前
|
前端开发 安全 Java
使用Java Web框架:Spring MVC的全面指南
【4月更文挑战第3天】Spring MVC是Spring框架的一部分,用于构建高效、模块化的Web应用。它基于MVC模式,支持多种视图技术。核心概念包括DispatcherServlet(前端控制器)、HandlerMapping(请求映射)、Controller(处理请求)、ViewResolver(视图解析)和ModelAndView(模型和视图容器)。开发流程涉及配置DispatcherServlet、定义Controller、创建View、处理数据、绑定模型和异常处理。
337 1
使用Java Web框架:Spring MVC的全面指南
|
6月前
|
设计模式 前端开发 网络协议
Java Web ——MVC基础框架讲解及代码演示(上)
Java Web ——MVC基础框架讲解及代码演示
48 0
|
6月前
|
前端开发 JavaScript Java
MVC框架:SpringMVC(三)
MVC框架:SpringMVC
59 0
|
6月前
|
JSON 前端开发 JavaScript
MVC框架:SpringMVC(二)
MVC框架:SpringMVC
63 0