MVC快速分页
.NET手记-ASP.NET MVC快速分页的实现
对于Web应用,展示List是很常见的需求,随之而来的常见的分页组件。jQuery有现成的分页组件,网上也有着大量的第三方分页组件,都能够快速实现分页功能。但是今天我描述的是用基本的C#和html代码实现的分页,不借助任何第三方组件。
实现思路

这里的实现主要借助ViewModel和HtmlHelper实现,通过传递分页参数PagingInfo来实现。
创建分页参数类PagingInfo.cs

using System; namespace CWHomeWebSite.Models
{
public class PagingInfo
{
//项目总数量
public int TotalItems { get; set; }
//当前索引
public int PageIndex { get; set; }
//分页大小
public int PageSize { get; set; }
//页数
public int PageCount
{
get
{
return (int)Math.Ceiling((decimal)TotalItems / PageSize);
}
}
}
}

创建视图对应的ViewModel

using CWHomeWebSite.Data.Entities;
using System.Collections.Generic; namespace CWHomeWebSite.Models
{
public class PostViewModel
{
//博客集合
public IEnumerable<Post> Posts { get; set; }
//分页参数
public PagingInfo PagingInfo { get; set; }
}
}

处理Controller视图方法
这里我们视图对应的方法是Index,其中分页参数设定了默认值,这样即使不传递也会默认分页。this.repository是注入的DBContext对象,提供数据源。

public ActionResult Index(int pageIndex = 1, int pageSize = 2)
{
//获取当前分页数据集合
var posts = this.repository.Posts
.OrderBy(p=>p.UpdateTime)
.Skip((pageIndex - 1) * pageSize)
.Take(pageSize); //将当前ViewModel传递给视图
return View(new PostViewModel
{
Posts = posts,
PagingInfo = new PagingInfo
{
TotalItems = this.repository.Posts.Count(),
PageIndex = pageIndex,
PageSize = pageSize
}
});
}

在View中通过Html辅助器扩展方法处理PagingInfo
利用上一篇文章讲述的扩展方法,为Html辅助器定义一个扩展方法用于生成分页html代码,实现如下:

using CWHomeWebSite.Models;
using System;
using System.Web.Mvc; namespace CWHomeWebSite.Helper
{
public static class PagingHelper
{
//HtmlHelper扩展方法,用于分页
public static MvcHtmlString Pagination(this HtmlHelper html, PagingInfo pageInfo,Func<PagingInfo,string> pageLinks)
{
var htmlString = pageLinks(pageInfo); return MvcHtmlString.Create(htmlString);
}
}
}

在视图中调用此扩展方法,处理逻辑通过Lamda表达式引用,这样可以修改View视图来调整并使用Url.Action来生成Url,而不用重新编译cs文件。完整的视图文件如下:

@model CWHomeWebSite.Models.PostViewModel
@using CWHomeWebSite.Helper @{
ViewBag.Title = "主页";
} <!-- 博客列表 -->
<section id="one">
<ul class="actions">
@foreach (var post in Model.Posts)
{
<li>
<header class="major">
<h2>
@post.Title <br />
| @post.CreateTime.ToShortDateString()
</h2> <p>@post.Description</p>
<ul class="actions">
<li>@Html.ActionLink("更多", "Detail", "Home", new { @post.PostId }, new { @class = "button" })</li>
</ul>
</header>
<hr />
</li>
} </ul> <!--分页代码-->
@Html.Pagination(Model.PagingInfo, (info) =>
{
var pagingString = "<ul class=\"actions small\">";
for (var i = 1; i <= info.PageCount; i++)
{
if (i == info.PageIndex)
{
pagingString += "<li><a class=\"special\" href=\"#\">" + i + "</a></li>";
}
else
pagingString += "<li><a class=\"normal\" href=\"" + Url.Action("Index", new { pageIndex = i, pageSize = info.PageSize }) + "\">" + i + "</a></li>";
}
pagingString += "</ul>";
return pagingString;
}) </section> <!--最近作品-->
@Html.Action("RecentWorks", "Work")

这样就可以轻松实现一个快速分页组件啦,我们运行一下,查看效果:

最后点击各页面索引,发现均实现预定目标,到此一个快速分页组件就实现啦。
MVC快速分页的更多相关文章
- .NET手记-ASP.NET MVC快速分页的实现
对于Web应用,展示List是很常见的需求,随之而来的常见的分页组件.jQuery有现成的分页组件,网上也有着大量的第三方分页组件,都能够快速实现分页功能.但是今天我描述的是用基本的C#和html代码 ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 基于存储过程的MVC开源分页控件--LYB.NET.SPPager
摘要 现在基于ASP.NET MVC的分页控件我想大家都不陌生了,百度一下一大箩筐.其中有不少精品,陕北吴旗娃杨涛大哥做的分页控件MVCPager(http://www.webdiyer.com/)算 ...
- 基于存储过程的MVC开源分页控件
基于存储过程的MVC开源分页控件--LYB.NET.SPPager 摘要 现在基于ASP.NET MVC的分页控件我想大家都不陌生了,百度一下一大箩筐.其中有不少精品,陕北吴旗娃杨涛大哥做的分页控件M ...
- ssm+maven+pageHelper搭建maven项目实现快速分页
ssm+maven+pageHelper搭建maven项目实现快速分页 PageHelper分页使用: 插件的环境引入: 1.pom文件中引入分页插件的资源位置: <dependency> ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- MySQL大数据量快速分页实现(转载)
在mysql中如果是小数据量分页我们直接使用limit x,y即可,但是如果千万数据使用这样你无法正常使用分页功能了,那么大数据量要如何构造sql查询分页呢? 般刚开始学SQL语句的时候,会这 ...
随机推荐
- Bdsyn百度手机助手是何物,它是怎样神不知鬼不觉地安装到你的电脑里的?
[电脑软件管理中Bdsyn手机助手的问题]Bdsyn手机助手 is developed by Baidu, Inc. and is used by 10 users of Software Infor ...
- 树莓派玩耍笔记4 -- 树莓派ssh党必备的配置
1. 关闭桌面显示 对于ssh 党.当然不须要系统花费资源在显示上. 所以我们先在 "raspi-conifg" 下选择默认启动为Text 启动(这好像也是Raspbian 的默认 ...
- POJ2528 Mayor's posters 【线段树】+【成段更新】+【离散化】
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 39795 Accepted: 11552 ...
- Function 详解(一)
一直想写一系列关于javascript的东西,可惜从申请博客以来就一直抽不出时间来好好写上一番,今天终于熬到周末,是该好好整理一下,那么先从声明函数开始吧; 总所周知,在javascript中有匿名函 ...
- POJ 2418 Hardwood Species( AVL-Tree )
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> ...
- 如何高效地向Redis插入大量的数据(转)
最近有个哥们在群里问,有一个日志,里面存的是IP地址(一行一个),如何将这些IP快速导入到Redis中. 我刚开始的建议是Shell+redis客户端. 今天,查看Redis官档,发现文档的首页部分( ...
- PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具 - 开源中国社区
PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具 - 开源中国社区 PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具
- ExtJs选择器
想要利用ExtJS的库函数对DOM进行各类操作,就要得到Element类型的对象,但是Ext.get()取到的虽然是Element,但是参数只能是id,如果大家对jQuery的selector方式很喜 ...
- python语言学习5——输入和输出
输出 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字. 注意点: 字符串用的是单引号 碰到逗号输出时就会输出一个空格 输入 python提供了一个input(),可以让用户输入一个字 ...
- hdu1532(最大流)
传送门:Drainage Ditches 题意:给出n个河流,m个点,以及每个河流的流量,求从1到m点的最大流量. 分析:网络流入门题,第一次写按照白书上毫无优化的Ford_fulkerson算法,先 ...