分页是网页基本功能,这里主要讨论在Asp.net MVC环境下分页的前端实现,不涉及后台分页。实现效果如下图显示:

Step 1.建立分页信息类

     public class PagingInfo
{
public int TotalItmes { set; get; }
public int ItemsPerPage { set; get; }
public int CurrentPage { set; get; }
public int TotalPages
{
get { return (int)Math.Ceiling((decimal)TotalItmes / ItemsPerPage); }
}
}

Step 2.建立HtmlHelper的分页扩展方法

     public static class PagingHelpers
{
public static MvcHtmlString PageLinks(this HtmlHelper html,PagingInfo pagingInfo,Func<int,string> pageUrl)
{
StringBuilder result = new StringBuilder();
result.Append("<ul>"); if (pagingInfo.CurrentPage > )
{
//建立首页分页链接
result.Append("<li>");
result.Append("<a href='");
result.Append(pageUrl());
result.Append("'>首页</a>");
result.Append("</li>");
//建立上一页分页链接
result.Append("<li>");
result.Append("<a href='");
result.Append(pageUrl(pagingInfo.CurrentPage-));
result.Append("'>上一页</a>");
result.Append("</li>");
} for(int i=;i<=pagingInfo.TotalPages;i++)
{
if(i<=||i>=pagingInfo.CurrentPage-&&i<=pagingInfo.CurrentPage+||i>=pagingInfo.TotalPages-)
{
createPageLink(pagingInfo, pageUrl, result, i);
}
else if(result[result.Length-]!='.')
{
result.Append("...");
}
} if (pagingInfo.CurrentPage < pagingInfo.TotalPages)
{
//建立上一页分页链接
result.Append("<li>");
result.Append("<a href='");
result.Append(pageUrl(pagingInfo.CurrentPage + ));
result.Append("'>下一页</a>");
result.Append("</li>");
//建立首页分页链接
result.Append("<li>");
result.Append("<a href='");
result.Append(pageUrl(pagingInfo.TotalPages));
result.Append("'>末页</a>");
result.Append("</li>");
}
result.Append("</ul>");
return MvcHtmlString.Create(result.ToString());
} private static void createPageLink(PagingInfo pagingInfo, Func<int, string> pageUrl, StringBuilder result, int i)
{
if (i == pagingInfo.CurrentPage)
{
result.Append("<li class='current'>");
}
else
{
result.Append("<li>");
}
result.Append("<a href='");
result.Append(pageUrl(i));
result.Append("'>");
result.Append(i);
result.Append("</a>");
result.Append("</li>");
}
}

扩展方法采用拼字符串的方式,也可以使用TagBuilder。

Step 3.添加Action

        public ActionResult Index(int page = )
{
PagingInfo pagingInfo = new PagingInfo {CurrentPage = page, TotalItmes = , ItemsPerPage = };
return View(pagingInfo);
}

这里TotalItems、ItemsPerPage均写死数据,实际TotalItems应从数据库统计计算,ItemsPerPage可以写入Web.config的AppSettings,也可读取数据库。

Step 4.添加View

@using 分页.HtmlHelpers
@model 分页.Models.PagingInfo <div class="pages">
@Html.PageLinks(Model, x => Url.Action("Index", new { page = x }))
</div>

现在已经可以运行查看结果:

Step 5.添加CSS,修改样式

.pages {
margin: 20px auto;
clear: both;
width: 890px;
text-align: center;
padding: 10px 0px;
text-align: center;
font-size: 12px;
} .pages ul {
display: inline;
margin: 0 auto;
width: 890px;
} .pages li {
display: inline;
margin: 0 auto;
} .pages a {
padding: 7px 11px;
border-radius: 3px;
margin: 4px;
background-color: #f2f3f5;
border: #ddd 1px solid;
color: #555;
text-decoration: none;
} .pages a:hover, li.current a {
background-color: #CC0000;
color: #FFFFFF;
border: #CC0000 1px solid;
text-decoration: none;
}

这样分页显示的前端部分就完成了,当然还有后台分页、路由设置等等问题留待下次完成。另外部分代码可修改用于WebForm。

Asp.net MVC分页实例的更多相关文章

  1. ASP.NET MVC分页组件MvcPager 2.0版发布暨网站全新改版

    MvcPager分页控件是在ASP.NET MVC Web应用程序中实现分页功能的一系列扩展方法,该分页控件的最初的实现方法借鉴了网上流行的部分源代码, 尤其是ScottGu的PagedList< ...

  2. ASP.NET MVC分页实现之改进版-增加同一个视图可设置多个分页

    我之前就已经实现了ASP.NET MVC分页(查看该博文),但它有局限性,必须确保在同一个视图中只能有一处分页,若需要在同一个视图中设置多个分页,却无能为力,为此,我重新对原先的代码进行了优化,增加了 ...

  3. 基于Bootstrap的Asp.net Mvc 分页

    基于Bootstrap的Asp.net Mvc 分页的实现 最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下.首先新建一 ...

  4. ASP.NET MVC分页实现

    ASP.NET MVC中不能使用分页控件,所以我就自己写了一个分页局部视图,配合PageInfo类,即可实现在任何页面任意位置呈现分页,由于采用的是基于POST分页方式,所以唯一的限制就是必须放在FO ...

  5. 自己用的一个ASP.Net MVC分页拿出来分享下(转)

    实例懒得做.切几个图把代码发上要用的自己搞啦~ 下面是一个helper类. namespace System.Web.Mvc { public enum BarStyle { yahoo, digg, ...

  6. asp.net MVC分页

    .Net MVC  分页代码,分页的关键就是在于这几个参数pageIndex ,recordCount,pageSize ,下面是张林的网站做的一个简单的分页代码 效果如图 public class ...

  7. Asp.Net MVC 分页、检索、排序整体实现

    很多时候需要这样的功能,对表格进行分页.排序和检索.这个有很多实现的方式,有现成的表格控件.用前端的mvvm,用户控件.但很多时候看着很漂亮的东西你想进一步控制的时候却不那么如意.这里自己实现一次,功 ...

  8. 自己动手写 ASP.NET MVC 分页 part1

    学习编程也有一年半载了,从来没有自己动手写过东西,都是利用搜索软件找代码,最近偶发感慨,难道真的继续做码农??? 突发奇想是不是该自己动手写点东西,可是算法.逻辑思维都太弱了,只能copy网上的代码, ...

  9. ASP.NET MVC分页 Ajax+JsRender

    前段时间整mvc的分页,倒是很顺利,参考了以下几篇博客,启发很大. http://www.cnblogs.com/tangmingjun/archive/2012/05/30/2526301.html ...

随机推荐

  1. Myeclipse Professional 2014使用软件获取激活码的方法(声明:破解仅仅是为个人使用Myeclipse,不作为商业获利.商业活动请购买正版软件)

    一下说明全部为网络来源,已经忘了原地址了,一直保留的是获取激活码用的软件和说明, 原著看见可联系(非常谢谢原作者): 获取激活码用的软件下载地址(个人百度云):http://pan.baidu.com ...

  2. HTML5 Security Cheatsheet使用说明

    1.URL: https://html5sec.org/ 2.通过点击如图button(也可点击其他:xss firefox)那行的button可以搜索所有button的Cheatsheet,查看都有 ...

  3. c#基础语言编程-编码

    字符编码是计算机技术的基础理论,其字符编码有ASCII码.UTF-8.还有就是GB2312,当然这是在中国常用的. 1.ASCII码 在计算机内部所有的信息都是以二进制字符进行存储.用每个二进制位中的 ...

  4. IOS 多个ImageView图片层叠透明区域点击事件穿透

    经常用到多个透明图片层叠,但又需要获取不同图片的点击事件,本文实现图片透明区域穿透点击事件 实现人体各个部位点击 - (BOOL) pointInside:(CGPoint)point withEve ...

  5. 1 - SQL Server 2008 之 使用SQL语句创建具有约束条件的表

    约束条件分为以下几种: 1)非空约束,使用NOT NULL关键字: 2)默认值约束,使用DEFAULT关键字: 3)检查约束,使用CHECK关键字: 4)唯一约束,使用UNIQUE关键字: 5)主键约 ...

  6. Python的Ftplib问题:UnicodeEncodeError: 'latin-1' codec can't encode characters的解决方法

    ftplib中有一个方法是cwd,用来切换目录,需要传入一个dirname,经过个人测试,该dirname不能含有汉字,会抛出:UnicodeEncodeError: 'latin-1' codec ...

  7. 《REWORK》启示录 招聘笔杆子——程序员为什么值得写博客

    Hire Great Writers 仿佛这是写给自己看的,不过这在其中也有着相当有趣的意义 .虽然自己算是一个能写的人,或许这算是一种不算才华的才华,写博文的意义通常不会在于去描述自己怎样,怎样.通 ...

  8. node.js中文资料导航

    以下资料来自gitHUb上面:https://github.com/youyudehexie/node123 Node.js HomePage Node官网七牛镜像 Infoq深入浅出Node.js系 ...

  9. 对象-关系映射ORM(Object Relational Mapping)(转)

    ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现 Hibernate在实现ORM功能的时候主要用到的文件有:映射类(*.java).映射文件(*.hbm.xml)和数据库配置文件 ...

  10. MyTask2

    先把核心代码贴上 public void solve() { //Console.WriteLine("请输入你需要生成多少人的数据以及年龄最大值(75以内):"); //int ...