using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
using System.Web.Mvc;
namespace System.Web.Mvc
{
#region Mvc 分页栏扩展方法 HtmlPaginationBar
/// <summary>
/// Mvc 分页栏扩展方法
/// </summary>
public static class HtmlPaginationBar
{
/// <summary>
/// 生成分页栏(页面调用 @Html.PaginationBar)
/// </summary>
/// <param name="helper"></param>
/// <param name="bar">分页栏生成器</param>
/// <returns></returns>
public static MvcHtmlString PaginationBar(this HtmlHelper helper, PaginationBar bar)
{
return new MvcHtmlString(bar.GenPaginationHtml());
}
}
#endregion
#region 分页实体 PageBar
/// <summary>
/// 分页参数类
/// </summary>
public class PageBar
{
/// <summary>
/// 总页数
/// </summary>
public int RecordCount { get; set; }
/// <summary>
/// 当前页索引
/// </summary>
public int PageIndex { get; set; }
/// <summary>
/// 当前页索引
/// </summary>
public int PageSize { get; set; }
}
#endregion
#region 分页导航栏生成器 PaginationBar
public class PaginationBar
{
/// <summary>
/// 分页导航栏生成器
/// </summary>
/// <param name="url">页面地址模板,其中改变的页面索引部分使用{0}替换</param>
/// <param name="pageBar">分页实体</param
public PaginationBar(String url, PageBar pageBar, object keyValues = null)
{
m_url = url;
m_pageCount = pageBar.RecordCount % pageBar.PageSize == 0 ? pageBar.RecordCount / pageBar.PageSize : (Int32)(pageBar.RecordCount / pageBar.PageSize) + 1;
m_pageIndex = pageBar.PageIndex;
m_recordCount = pageBar.RecordCount;
m_pageSize = pageBar.PageSize;
m_keyValues = keyValues;
}
private Int32 m_pageIndex = 0;
private Int32 m_pageCount = 0;
private Int32 m_recordCount = 0;
private Int32 m_pageSize = 0;
private String m_url = String.Empty;
private object m_keyValues = null;
private StringBuilder m_html = new StringBuilder();
private StringBuilder m_js = new StringBuilder();
private StringBuilder m_param = new StringBuilder();
/// <summary>
/// 生成分页m_html与js代码
/// </summary>
/// <returns></returns>
public String GenPaginationHtml()
{
StringBuilder m_html = new StringBuilder();
//js参数复制
m_js.AppendLine("<script> function Pagination(){");
m_js.Append(GenJs());
m_js.AppendLine("} Pagination();</script>");
//HTML
m_html.Append("<div id='pagination'>");
m_html.Append(GenFirst());
m_html.Append(GenPre());
m_html.Append(GenNext());
m_html.Append(GenLast());
m_html.Append(GenJump());
m_html.Append(GenLabel());
m_html.Append("</div>");
return m_html.ToString() + m_js.ToString();
}
/// <summary>
/// 获取js代码
/// </summary>
/// <returns></returns>
public String GenJs()
{
if (m_keyValues == null)
return String.Empty;
StringBuilder js = new StringBuilder();
//循环参数
foreach (var p in m_keyValues.GetType().GetProperties())
{
object val = p.GetValue(m_keyValues, null);
js.AppendLine(String.Format("document.getElementById('{0}').value={1}", p.Name, val));
m_param.Append(String.Format("&{0}={1}", p.Name, val));
}
return js.ToString();
}
/// <summary>
/// 首页
/// </summary>
private String GenFirst()
{
return String.Format("<a class='first' href='{0}?pageIndex={1}{2}'>首页</a>", m_url, 0, m_param);
}
/// <summary>
/// 尾页
/// </summary>
private String GenLast()
{
return String.Format("<a class='last' href='{0}?pageIndex={1}{2}'>尾页</a>", m_url, m_pageCount, m_param);
}
/// <summary>
/// 生成上一页
/// </summary>
private String GenPre()
{
return String.Format("<a class='prev' href='{0}?pageIndex={1}{2}'>前一页</a>", m_url, (m_pageIndex != 1 ? m_pageIndex - 1 : 1), m_param);
}
/// <summary>
/// 生成下一页
/// </summary>
private string GenNext()
{
return String.Format("<a class='next' href='{0}?pageIndex={1}{2}'>后一页</a>", m_url, (m_pageIndex == m_pageCount ? m_pageIndex : m_pageCount + 1), m_param);
}
/// <summary>
/// 生成
/// </summary>
private String GenJump()
{
StringBuilder m_jump = new StringBuilder();
for (Int32 i = 1; i <= m_pageCount; i++)
{
m_jump.Append(String.Format("<option value={0}>{0}</option>", i));
}
return String.Format("<select id='pageIndex' name='pageIndex' onchange='javacript:window.location.href={1}?1=1{2}' />{0}<select>", m_jump, m_url, m_param);
}
/// <summary>
/// 生成
/// </summary>
private String GenLabel()
{
return String.Format("第{0}页,共{1}页,每页{2}条,共{3}条", m_pageIndex, m_pageCount, m_pageSize, m_recordCount);
}
}
#endregion
}
Mvc 分页栏扩展方法的更多相关文章
-
mvc给html扩展方法:
mvc给html扩展方法: 注意:扩展方法和所在的类都必须是 public static如果在页面直接使用新扩展的方法,需要web.config里把Web.Helper名称命名空间加上,页面才能访问到 ...
-
MVC缓存03,扩展方法实现视图缓存
关于缓存,先前尝试了: ● 在"MVC缓存01,使用控制器缓存或数据层缓存"中,分别在控制器和Data Access Layer实现了缓存 ● 在"MVC缓存02,使用数 ...
-
自定义MVC的Helper扩展方法
记得在开发ASP.NET时候,也经常性使用C#可以写自己义的扩展方法,如:http://www.cnblogs.com/insus/p/3154363.html 或http://www.cnblogs ...
-
自定义MVC的Helper扩展方法 转 Insus.NET
记得在开发ASP.NET时候,也经常性使用C#可以写自己义的扩展方法,如: http://www.cnblogs.com/insus/p/3154363.html 或http://www.cnblog ...
-
ASP.NET + MVC5 入门完整教程四---MVC 中使用扩展方法
https://blog.csdn.net/qq_21419015/article/details/80433640 1.示例项目准备1)项目创建新建一个项目,命名为LanguageFeatures ...
-
Enum扩展及MVC中DropDownListFor扩展方法的使用
public enum SearchState { /// <summary> /// 全部 /// </summary> [Description("全部" ...
-
MVC 中使用扩展方法
扩展方法(Extension Method)是给那些不是你拥有.因而不能直接修改的类添加方法的一种方便的办法. 一.使用扩展方法 1.定义一个购物车的类-ShoppingCart using Sys ...
-
ASP.NET MVC之持久化TempData及扩展方法(十三)
前言 之前在开始该系列之前我们就讲述了在MVC中从控制器到视图传递数据的四种方式,但是还是存在一点问题,本节就这个问题进行讲述同时进行一些练习来看看MVC中的扩展方法. 话题 废话不必多说,我们直接进 ...
-
MVC 扩展方法特点
.NET MVC 3中扩展方法特点: (1)扩展类的名称以Extensions结尾: (2)扩展类的类型是static: (3)扩展方法至少有一个参数,第一个参数必须指定该方法作用于哪个类型,并且该参 ...
随机推荐
-
Cacti修改采集精度为1分钟
前言: 基础知识:建议先了解一下 rrdtool 及 rrd 数据库的工作原理,参考阅读<rrdtool学习笔记> cacti主要使用了rrdtool这个工具来绘图,所以看上去比zabbi ...
-
lua创建文件和文件夹
创建文件夹: os.execute('mkdir xx') 创建文件: f = assert(io.open('a.tmp','w')) f:write('test') f:close()
-
java提高篇(八)----详解内部类
可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面 ...
-
const、static、extern三个关键字
默认情况下,C语言的全局变量是全世界都可以访问的,也就是全局变量可以跨文件访问. extern可以引用全局变量 例如,如果有一个全局变量int money = 100;extern int money ...
-
redis+crontab+php异步处理任务
2016年1月8日 16:08:43 星期五 情景: 用户登录日志, 发邮件, 发短信等等实时性要求不怎么高的业务通常会异步执行 之前接触过几种redis+crontab配套的实现方法, 比如: cr ...
-
MongoDB 复制篇
mongoDB 复制篇 复制集简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写 ...
-
ELK + Filebeat 日志分析系统
ELK + Filebeat 日志分析系统 架构图 环境 OS:CentOS 7.4 Filebeat: 6.3.2 Logstash: 6.3.2 Elasticsearch 6.3.2 Kiban ...
-
android系统下消息推送机制
一.推送方式简介: 当前随着移动互联网的不断加速,消息推送的功能越来越普遍,不仅仅是应用在邮件推送上了,更多的体现在手机的APP上.当我们开发需要和服务器交互的应用程序时,基本上都需要获取服务器端的数 ...
-
rimraf 跨平台删除文件
利用npm script 来删除文件, "scripts": { "clear": "rm -rf dist" } 但存在一个问题,remo ...
-
[No0000179]改善C#程序的建议2:C#中dynamic的正确用法
dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...