1.定义一个分页用的Page<T>类

  1 /* 使用示例:
  2      var pager = new Pager<Article>(
  3                 this.ControllerContext, //上下文
  4                 type.Articles,//数据源
  5                 10//,每页大小
  6                 //"page" url中分页参数名称,默认为page
  7                 );
  8      * */
  9     /// <summary>
 10     /// 基于ControlerContext的分页辅助类
 11     /// </summary>
 12     /// <typeparam name="T"></typeparam>
 13
 14     public class Pager<T>
 15     {
 16         /// <summary>
 17         /// 数据分页初始化函数
 18         /// </summary>
 19         /// <param name="context">控制器请求上下文</param>
 20         /// <param name="source">数据源</param>
 21         /// <param name="pageSize">每页条数</param>
 22         /// <param name="currentPageurlParamName">Url中当前页参数名称</param>
 23         public Pager(
 24             ControllerContext context,
 25             IEnumerable<T> source,
 26             int pageSize = 10,
 27             string currentPageurlParamName = "page")
 28         {
 29
 30             this.PageSize = pageSize;
 31             this.CurrentPageUrlParamName = currentPageurlParamName;
 32
 33             this.TotalItmesCount = source.Count();
 34             var page = 1;
 35             int.TryParse(context.HttpContext.Request.Params[CurrentPageUrlParamName], out page);
 36             this.CurrentPage = page;
 37
 38             this.data = source.Skip((CurrentPage - 1) * PageSize)
 39                              .Take(PageSize);
 40
 41             this.PageNavProvider = new PagerNavProvider<T>(this);
 42         }
 43         /// <summary>
 44         /// URL中 页码参数名称
 45         /// </summary>
 46         public string CurrentPageUrlParamName
 47         {
 48             get;
 49             private set;
 50         }
 51         private int currentPage;
 52         /// <summary>
 53         /// 当前页码,从1开始
 54         /// </summary>
 55         public int CurrentPage
 56         {
 57             get { return currentPage; }
 58             private set
 59             {
 60                 if (value > TotalPage)
 61                     currentPage = TotalPage;
 62                 else if (value <= 0)
 63                     currentPage = 1;
 64                 else
 65                     currentPage = value;
 66             }
 67         }
 68         /// <summary>
 69         /// 用于分页的数据总数
 70         /// </summary>
 71         public int TotalItmesCount
 72         {
 73             get;
 74             private set;
 75         }
 76         /// <summary>
 77         /// 每页包含的数据总数,默认为10条
 78         /// </summary>
 79         public int PageSize
 80         {
 81             get;
 82             private set;
 83         }
 84         /// <summary>
 85         /// 最大页码,即总页数
 86         /// </summary>
 87         public int TotalPage
 88         {
 89             get
 90             {
 91                 return (TotalItmesCount / PageSize) + (TotalItmesCount % PageSize > 0 ? 1 : 0);
 92             }
 93         }
 94         /// <summary>
 95         /// 是否有上一页
 96         /// </summary>
 97         public bool HasPrev
 98         {
 99             get
100             {
101                 return CurrentPage > 1;
102             }
103         }
104         /// <summary>
105         /// 是否有下一页
106         /// </summary>
107         public bool HasNext
108         {
109             get
110             {
111                 return CurrentPage < TotalPage;
112             }
113         }
114         /// <summary>
115         /// 上一页页码
116         /// </summary>
117         public int PrevPage
118         {
119             get
120             {
121                 if (HasPrev)
122                     return CurrentPage - 1;
123                 else
124                     throw new Exception("已经是第一页了!");
125             }
126         }
127         /// <summary>
128         /// 下一页页码
129         /// </summary>
130         public int NextPage
131         {
132             get
133             {
134                 if (HasNext)
135                     return CurrentPage + 1;
136                 else
137                     throw new Exception("已经是最后一页了!");
138             }
139         }
140         private IEnumerable<T> data;
141         /// <summary>
142         /// 当前页包含的数据
143         /// </summary>
144         public IEnumerable<T> CurrentPageItems
145         {
146             get { return data; }
147         }
148
149         public PagerNavProvider<T> PageNavProvider { get; private set; }
150     }
151
152     public class PagerNavProvider<T>
153     {
154
155         public PagerNavProvider(Pager<T> pager, int dispalyPage = 10)
156         {
157             DisplayPage = dispalyPage;
158             var cur = pager.CurrentPage;
159             StartPageNum = cur - pager.PageSize / 2;
160             EndPageNum = cur + pager.PageSize / 2;
161             if (StartPageNum <= 0 || pager.TotalPage < DisplayPage)
162                 StartPageNum = 1;
163             if (EndPageNum >= pager.TotalPage || pager.TotalPage < DisplayPage)
164                 EndPageNum = pager.TotalPage;
165         }
166         public int DisplayPage { get; private set; }
167         public int StartPageNum { get; private set; }
168         public int EndPageNum { get; private set; }
169     }

2.定义一个要展示列表数据的视图模型(根据具体情况定义模型属性)

1 public class ServiceListVModel
2     {
3
4         public IEnumerable<Service> Services { get; set; }
5
6         public Pager<Service> Pager { get; set; }
7
8
9     }

3.在控制器中为视图模型赋值传递数据

 1  public ActionResult List(string code = "11")
 2         {
 3             var services = dbSession.ServiceRepository.LoadEntities(p=>p.Type.StartsWith(code));
 4             var model = new ServiceListVModel();
 5             model.Services = services;
 6             var pager = new Pager<Service>(
 7                 this.ControllerContext,
 8                 services,
 9                 10);
10             model.Pager = pager;
11             ViewBag.ServiceTypeCode = code;
12             return View(model);
13         }

4.前端页面数据展示(分页样式根据自己想要的效果自由替换)

 1 @model ServiceTrade.ViewModels.ServiceListVModel
 2 @{
 3     ViewBag.Title = "服务列表";
 4     Layout = "~/Views/Shared/_Layout.cshtml";
 5 }
 6 <div class="centerMain goldMain middle clearfix" id="goldMainL">
 7     <div class="goldMainW">
 8         @Html.Action("ServiceTypeList")
 9         <ul class="searchResultList">
10          @foreach (var item in Model.Pager.CurrentPageItems)
11             {
12                 <li class="searchTerms clearfix">
13                     <div class="searchTermsPic">
14                         <a class="searchTerPicA" href="/Service/Detail?id=@item.ID" target="_blank"
15                     title="@item.Name">
16                             <img alt="@item.Name" src="@item.Pic" style=" width:100px; height:100px;"></a>
17                     </div>
18                     <div class="searchTermsDetail">
19                         <h2 class="title">
20                             <a data-exposure="1,0,67167185" class="comtitle" href="/Service/Detail?id=@item.ID"
21                         target="_blank" title="@item.Name">@item.Name</a>
22                         </h2>
23                         <div class="searchTermsDIntro">
24                         <b>¥@item.Price</b>
25                     </div>
26                         <div class="searchTermsOper">
27                             <a rel="external nofollow" class="qq" target="_blank" href="http://wpa.qq.com/msgrd?v=3&amp;uin=@item.Company.QQ&amp;site=qq&amp;menu=yes">
28                                 <img border="0" src="../../../Themes/FrontEnd/Images/qq.gif" alt="点击这里给我发消息" title="点击这里给我发消息"></a>
29                         </div>
30                     </div>
31                     <div class="searchTermsC">
32                         <p class="companyName">
33                             <a data-exposure="1,2055823,0" href="/Company/Index?id=@item.CompanyID" target="_blank">
34                                 @item.Company.Name</a>
35                         </p>
36                         <p class="bus-mod">
37                             经营模式:@item.Company.BusinessModel</p>
38                         <p class="companySell">
39                             <span class="sell">主营:</span> @item.Company.MainService
40                         </p>
41                          <p class="relate">
42                         <a href="javascript:void(0);" target="_blank">厂家地址</a>
43                         | <a href="javascript:void(0);" target="_blank">更多产品</a></p>
44                     </div>
45                 </li>
46             }
47         </ul>
48
49         <div class="pagination middle">
50             @Html.Partial("_PagerNavX", Model.Pager)
51             <div class="gotoPages">
52             @if (Model.Services != null)
53             {
54                 <span>共 @Model.Services.Count()页</span>
55             }
56             else
57             {
58                 <span>共0页</span>
59             }
60             </div>
61         </div>
62     </div>
63 </div>

5.分页模块视图代码(_PagerNavX.cshtml)

 1 @model Huazeming.Common.Mvc.Pager<SimpleNews.DAL.Service>
 2 @{
 3     var start = Model.PageNavProvider.StartPageNum;
 4     var end = Model.PageNavProvider.EndPageNum;
 5     var cur = Model.CurrentPage;
 6     //var type = Model.CurrentPageItems.First().Type;
 7     var typeCode = ViewBag.ServiceTypeCode;
 8 }
 9 <div class="pages">
10     @if (Model.HasPrev)
11     {
12
13         <a href="/Service/List?page=@Model.PrevPage&code=@typeCode">上一页</a>
14
15     }
16     else
17     {
18         <span class="noChangePage">上一页</span>
19     }
20     @for (var i = start; i <= end; i++)
21     {
22         if (i == cur)
23         {
24         <a class="current" href="javascript:;">@cur</a>
25
26         }
27         else
28         {
29         <a href="/Service/List?page=@i&code=@typeCode" rel="external nofollow">@i</a>
30         }
31     }
32     @if (Model.HasNext)
33     {
34         <a href="/Service/List?page=@Model.NextPage&code=@typeCode">下一页</a>
35     }
36     else
37     {
38         <span class="noChangePage">下一页</span>
39     }
40 </div>

6.分页部分CSS样式

 1 /*pagination*/
 2 .pagination{width: 100%;overflow:hidden;text-align: center;}
 3 .pagination .pages{vertical-align: middle;display: inline-block;text-align: center;*display:inline; zoom:1;}
 4 .pagination .gotoPages{display: inline-block;text-align: center;*display:inline; zoom:1;}
 5 .pagination a,.pagination .pageBreak,.pagination .noChangePage{border: 1px #e1e1e1 solid;display:inline-block;border-right:0 none;height: 30px;height: 30px;line-height: 30px;padding: 0 11px;text-align: center;vertical-align: middle;white-space: nowrap;font-size: 14px;color: #2968aa;font-weight: 700;}
 6 .pagination .pages a:hover,.pagination .current{color: #ff781f;text-decoration: none;}
 7 .pagination .pageBreak{border:0 none;border-left: 1px #e1e1e1 solid;font-weight: 400;}
 8 .pagination .prevs,.pagination .noChangePage{margin-right: 4px;border: 1px #e1e1e1 solid;font-size: 12px;font-weight: 400;}
 9 .pagination .nextPage{margin-right: 4px;border: 1px #e1e1e1 solid;font-size: 12px;font-weight: 400;}
10 .pagination .noChangePage{color: #888888;cursor: default;}
11 .pagination .pageNumberI{width: 41px;padding:3px 2px;height:18px;border: 1px #e0e0e0 solid;margin-right: 3px;margin-left: 3px;}
12 .pagination .gotoPages span{margin:0 15px;}
13 .pagination .gotoPagesBtn{border:0 none;background:none;width:58px;height:24px;border-radius: 3px;border: 1px solid #b3b3b3;color: #333333;cursor: pointer;}
14 /*pagination*/

7.分页最终效果图

转 ---- Asp.net mvc项目分页功能的更多相关文章

  1. Asp.net mvc项目分页功能

    1.定义一个分页用的Page<T>类 /* 使用示例: var pager = new Pager<Article>( this.ControllerContext, //上下 ...

  2. 学习ASP.NET MVC(十一)——分页

    在这一篇文章中,我们将学习如何在MVC页面中实现分页的方法.分页功能是一个非常实用,常用的功能,当数据量过多的时候,必然要使用分页.在今天这篇文章中,我们学习如果在MVC页面中使用PagedList. ...

  3. 基于BUI开发Asp.net MVC项目

    因工作性质参于并开发过一些Web应用程序,前端项目框架也用了不少,比如MiniUI.ExtJS.以及定制的项目前端框架.无意中看到BUI前端框架,第一眼就被它的优雅布局所吸引.简洁的项目门户Banne ...

  4. ASP.NET MVC项目实现BasePage基类用作ASPX.CS网页继承

    在ASP.NET MVC项目开发,还是需要创建一些Web Page来实现一些功能,如呈现报表等... 但是一旦项目的.ASPX网页太多了,其中的程序代码也会有代码冗余,出现这些情况,我们得需要对这些代 ...

  5. asp.net MVC通用分页组件 使用方便 通用性强

    asp.net MVC通用分页组件 使用方便 通用性强   该分页控件的显示逻辑: 1 当前页面反色突出显示,链接不可点击 2 第一页时首页链接不可点击 3 最后一页时尾页链接不可点击 4 当前页面左 ...

  6. AngularJS2 + ASP.NET MVC项目

    环境:VS2015, NodeJS:v 6.5, npm: v3.10, AngularJs 2 通过将ASP.NET MVC项目与Angualr 2官网上的quick start整合的过程中遇到些问 ...

  7. 远程调试 ASP.NET MVC 项目

    Visual Studio 支持从一台计算机到另一台设备的远程调试.进行远程调试时,主机可以是任何支持 Visual Studio 的平台.远程设备可以是 x86.x64 或 ARM 平台. 本文将指 ...

  8. 习题-任务2初始ASP.NET MVC项目开发

    一.选择题 1.在ASP.NET MVC项目的RouteConfig.cs文件中,(    )方法注册了默认的路由配置. A.RegisterMap    B.RegisterRoutes    C. ...

  9. Asp.net mvc项目架构分享系列之架构概览

    Asp.net mvc项目架构分享系列之架构概览 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4.项目架构 ...

随机推荐

  1. Python实战:美女图片下载器,海量图片任你下载

    Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习 ...

  2. 安卓Intent(显式)

    1.Intent是Android程序中各组件之间交互的重要方式,一般可用于启动活动.启动服务.以及发送广播等场景,这里先对活动进行说明Intent的一些作用. 2.Intent的用法大致可分为,显式I ...

  3. github上建站和使用markdown写文章

    积累了那么久,终于成功搭建了github上的个人网站.虽然方法有点巧妙.不是还是建成了 同时学会用markdown写基本的文章.感觉还可以.附带我的github上的静态页面网站的网址:http://z ...

  4. SqlSugar-执行Sql语句查询实例

    使用SqlSugar执行sql语句 1.简单查询 SqlSugarClient db = SugarContext.GetInstance(); //执行sql语句,处理 //1.执行sql,转成li ...

  5. (转)php连接mysql如何判断数据为空?

    <?php$result_a=mysql_query("select * from product_tag where product_id=$row[id]");$num ...

  6. jQuery AJAX load() 方法

    jQuery load() 方法 jQuery load() 方法是简单但强大的 AJAX 方法. load() 方法从服务器加载数据,并把返回的数据放入被选元素中. 语法: $(selector). ...

  7. python学习笔记--随时更新

    # coding=GBK score = 90 if score >= 80: print("好") elif score >= 60: print("及格& ...

  8. mysql 刘道成视频教程 第3课

    第3课: 1.mysql中条件使用关键字where: 2.查 select name,content from msg ; select name,content 控制列 where id>2 ...

  9. 深入了解jquery中的键盘事件

    很多时候,我们需要获取用户的键盘事件,下面就一起来看看jquery是如何操作键盘事件的. 一.首先需要知道的是: 1.keydown() keydown事件会在键盘按下时触发. 2.keyup() k ...

  10. 关于webapp的一个webframe问题

    最近重启ios webapp的项目,将之前的框架拿过来发现出现了错误,错误出现在写JSAlart控件的WebFrame上,xcode会报WebFrame是未定义的错误.由于之前使用的是ios5的 sd ...