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

 /* 使用示例:
var pager = new Pager<Article>(
this.ControllerContext, //上下文
type.Articles,//数据源
10//,每页大小
//"page" url中分页参数名称,默认为page
);
* */
/// <summary>
/// 基于ControlerContext的分页辅助类
/// </summary>
/// <typeparam name="T"></typeparam> public class Pager<T>
{
/// <summary>
/// 数据分页初始化函数
/// </summary>
/// <param name="context">控制器请求上下文</param>
/// <param name="source">数据源</param>
/// <param name="pageSize">每页条数</param>
/// <param name="currentPageurlParamName">Url中当前页参数名称</param>
public Pager(
ControllerContext context,
IEnumerable<T> source,
int pageSize = ,
string currentPageurlParamName = "page")
{ this.PageSize = pageSize;
this.CurrentPageUrlParamName = currentPageurlParamName; this.TotalItmesCount = source.Count();
var page = ;
int.TryParse(context.HttpContext.Request.Params[CurrentPageUrlParamName], out page);
this.CurrentPage = page; this.data = source.Skip((CurrentPage - ) * PageSize)
.Take(PageSize); this.PageNavProvider = new PagerNavProvider<T>(this);
}
/// <summary>
/// URL中 页码参数名称
/// </summary>
public string CurrentPageUrlParamName
{
get;
private set;
}
private int currentPage;
/// <summary>
/// 当前页码,从1开始
/// </summary>
public int CurrentPage
{
get { return currentPage; }
private set
{
if (value > TotalPage)
currentPage = TotalPage;
else if (value <= )
currentPage = ;
else
currentPage = value;
}
}
/// <summary>
/// 用于分页的数据总数
/// </summary>
public int TotalItmesCount
{
get;
private set;
}
/// <summary>
/// 每页包含的数据总数,默认为10条
/// </summary>
public int PageSize
{
get;
private set;
}
/// <summary>
/// 最大页码,即总页数
/// </summary>
public int TotalPage
{
get
{
return (TotalItmesCount / PageSize) + (TotalItmesCount % PageSize > ? : );
}
}
/// <summary>
/// 是否有上一页
/// </summary>
public bool HasPrev
{
get
{
return CurrentPage > ;
}
}
/// <summary>
/// 是否有下一页
/// </summary>
public bool HasNext
{
get
{
return CurrentPage < TotalPage;
}
}
/// <summary>
/// 上一页页码
/// </summary>
public int PrevPage
{
get
{
if (HasPrev)
return CurrentPage - ;
else
throw new Exception("已经是第一页了!");
}
}
/// <summary>
/// 下一页页码
/// </summary>
public int NextPage
{
get
{
if (HasNext)
return CurrentPage + ;
else
throw new Exception("已经是最后一页了!");
}
}
private IEnumerable<T> data;
/// <summary>
/// 当前页包含的数据
/// </summary>
public IEnumerable<T> CurrentPageItems
{
get { return data; }
} public PagerNavProvider<T> PageNavProvider { get; private set; }
} public class PagerNavProvider<T>
{ public PagerNavProvider(Pager<T> pager, int dispalyPage = )
{
DisplayPage = dispalyPage;
var cur = pager.CurrentPage;
StartPageNum = cur - pager.PageSize / ;
EndPageNum = cur + pager.PageSize / ;
if (StartPageNum <= || pager.TotalPage < DisplayPage)
StartPageNum = ;
if (EndPageNum >= pager.TotalPage || pager.TotalPage < DisplayPage)
EndPageNum = pager.TotalPage;
}
public int DisplayPage { get; private set; }
public int StartPageNum { get; private set; }
public int EndPageNum { get; private set; }
}

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

 public class ServiceListVModel
{ public IEnumerable<Service> Services { get; set; } public Pager<Service> Pager { get; set; } }

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

  public ActionResult List(string code = "")
{
var services = dbSession.ServiceRepository.LoadEntities(p=>p.Type.StartsWith(code));
var model = new ServiceListVModel();
model.Services = services;
var pager = new Pager<Service>(
this.ControllerContext,
services,
);
model.Pager = pager;
ViewBag.ServiceTypeCode = code;
return View(model);
}

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

 @model ServiceTrade.ViewModels.ServiceListVModel
@{
ViewBag.Title = "服务列表";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="centerMain goldMain middle clearfix" id="goldMainL">
<div class="goldMainW">
@Html.Action("ServiceTypeList")
<ul class="searchResultList">
@foreach (var item in Model.Pager.CurrentPageItems)
{
<li class="searchTerms clearfix">
<div class="searchTermsPic">
<a class="searchTerPicA" href="/Service/Detail?id=@item.ID" target="_blank"
title="@item.Name">
<img alt="@item.Name" src="@item.Pic" style=" width:100px; height:100px;"></a>
</div>
<div class="searchTermsDetail">
<h2 class="title">
<a data-exposure="1,0,67167185" class="comtitle" href="/Service/Detail?id=@item.ID"
target="_blank" title="@item.Name">@item.Name</a>
</h2>
<div class="searchTermsDIntro">
<b>¥@item.Price</b>
</div>
<div class="searchTermsOper">
<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">
<img border="" src="../../../Themes/FrontEnd/Images/qq.gif" alt="点击这里给我发消息" title="点击这里给我发消息"></a>
</div>
</div>
<div class="searchTermsC">
<p class="companyName">
<a data-exposure="1,2055823,0" href="/Company/Index?id=@item.CompanyID" target="_blank">
@item.Company.Name</a>
</p>
<p class="bus-mod">
经营模式:@item.Company.BusinessModel</p>
<p class="companySell">
<span class="sell">主营:</span> @item.Company.MainService
</p>
<p class="relate">
<a href="javascript:void(0);" target="_blank">厂家地址</a>
| <a href="javascript:void(0);" target="_blank">更多产品</a></p>
</div>
</li>
}
</ul> <div class="pagination middle">
@Html.Partial("_PagerNavX", Model.Pager)
<div class="gotoPages">
@if (Model.Services != null)
{
<span>共 @Model.Services.Count()页</span>
}
else
{
<span>共0页</span>
}
</div>
</div>
</div>
</div>

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

 @model Huazeming.Common.Mvc.Pager<SimpleNews.DAL.Service>
@{
var start = Model.PageNavProvider.StartPageNum;
var end = Model.PageNavProvider.EndPageNum;
var cur = Model.CurrentPage;
//var type = Model.CurrentPageItems.First().Type;
var typeCode = ViewBag.ServiceTypeCode;
}
<div class="pages">
@if (Model.HasPrev)
{ <a href="/Service/List?page=@Model.PrevPage&code=@typeCode">上一页</a> }
else
{
<span class="noChangePage">上一页</span>
}
@for (var i = start; i <= end; i++)
{
if (i == cur)
{
<a class="current" href="javascript:;">@cur</a> }
else
{
<a href="/Service/List?page=@i&code=@typeCode" rel="external nofollow">@i</a>
}
}
@if (Model.HasNext)
{
<a href="/Service/List?page=@Model.NextPage&code=@typeCode">下一页</a>
}
else
{
<span class="noChangePage">下一页</span>
}
</div>

6.分页部分CSS样式

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

7.分页最终效果图

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

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

    1.定义一个分页用的Page<T>类 1 /* 使用示例: 2 var pager = new Pager<Article>( 3 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. 如何让tomcat加载项目变快

    修改配置: VM options填写内容: -Xms128m -Xmx256m -XX:PermSize=128m -XX:MaxPermSize=256m` 图示: ##1: ##2:

  2. HIHOcoder编程总结

    [Offer收割]编程练习赛44 对于第一题题目1 : 扫雷游戏,首先要想清楚思路,虽然是暴力算法,但是这八个方向要自己把坐标写正确,不要慌乱,自己写的时候就写错了一个,第二个就是判断的时候,j + ...

  3. SQL数据库入门基础

      SQL(Structure Query Language,结构化查询语言)语言是国际标准化组织(ISO)采纳的标准数据库语言. 数据库就是一幢大楼,我们要先盖楼,然后再招住户(住户当然就是数据库对 ...

  4. 「AHOI2008」紧急集合/聚会

    题目描述 这次也是很长的题面啊\(qwq\) 题目大意如下: 给定一棵\(N\)个节点的树以及\(M\)次询问,每次询问给出\(x,\ y,\ z\)三个节点,程序需要在树上找一个点\(p\) 使得\ ...

  5. iis下发布MVC网站

    1.首先检查有没有安装iis,没有的话先安装iis 2. 3.选择应用程序池的时候看有没有asp.net 4.0 如果没有先安装. 首先以管理员身份打开“运行”输入cd C:\Windows\Micr ...

  6. UISearchBar设置背景色

    1.关于UISearchBar的背景颜色,竟然要如下设置才正常: [documentSearchView setBackgroundImage:[UIImage new]]; documentSear ...

  7. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:原始按钮样式(未被操作)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 代理实现aop以及代理工厂实现增强

    一.静态代理实现 1.接口(抽象主题) 2.接口的实现类(真实主题) 3.代理类(代理主题) 4.测试类: ApplicationContext context=new ClassPathXmlApp ...

  9. 安装 primecoin 矿池

    壹.安装 boost_1_49_0. 一.官网下载:https://www.boost.org/users/download/ 前期准备:boost中,用到了别的函数库,所以为了使用boost中相应的 ...

  10. Intellij Idea webstorm 激活

    参考: 最新破解 https://www.cnblogs.com/litterCoder/p/12175461.html 推荐 https://mp.weixin.qq.com/s/zxfDAlN8G ...