分页是网页基本功能,这里主要讨论在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. wikioi 1154 能量项链 (2006年NOIP全国联赛提高组)

    题目描述 Description 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子 ...

  2. 365. Water and Jug Problem

    莫名奇妙找了个奇怪的规律. 每次用大的减小的,然后差值和小的再减,减减减减减减到差值=0为止.(较小的数 和 差值 相等为止,这么说更确切) 然后看能不能整除就行了. 有些特殊情况. 看答案是用GCD ...

  3. Maven浅析-1

    Maven的配置 1.首先从http://maven.apache.org/download.cgi下载当前最新版本的maven. 如果不想自己安装maven的话,建议直接下binary zip文件, ...

  4. thinkphp 区分大小写的文件存在判断

    /** * 区分大小写的文件存在判断 * @param string $filename 文件地址 * @return boolean */ function file_exists_case($fi ...

  5. winform 五子棋 判断输赢 分类: WinForm 2014-08-07 20:55 256人阅读 评论(0) 收藏

    新手上路,高手勿进! 利用数组,根据新旧数组值的不同,获取那个点是什么棋子: 说明: 棋盘:15*15; 定义4个全局变量: string[,] stroldlist = new string[15, ...

  6. ArrayList and LinkedList

    ArrayList and LinkedList List代表一种线性表的数据结构,ArrayList则是一种顺序存储的线性表.ArrayList底层采用数组来保存每个集合元素,LinkedList则 ...

  7. Instruction (hdu 5083)

    Instruction Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  8. android 11 模拟onclick 事件

    package com.sxt.callback; public class Button { //预存一段按钮点击的响应代码 private OnclickListener mOnClickList ...

  9. 理解 Linux 网络栈(1):Linux 网络协议栈简单总结 图

    http://www.cnblogs.com/sammyliu/p/5225623.html

  10. (转载)linux那点事儿(上)

    原文地址:http://www.cnblogs.com/fnng/archive/2012/03/19/2407162.html 本文只是转载供自己学习之用 本文算是学linux的学习笔记吧!其实li ...