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 分页栏扩展方法的更多相关文章

  1. mvc给html扩展方法:

    mvc给html扩展方法: 注意:扩展方法和所在的类都必须是 public static如果在页面直接使用新扩展的方法,需要web.config里把Web.Helper名称命名空间加上,页面才能访问到 ...

  2. MVC缓存03,扩展方法实现视图缓存

    关于缓存,先前尝试了: ● 在"MVC缓存01,使用控制器缓存或数据层缓存"中,分别在控制器和Data Access Layer实现了缓存 ● 在"MVC缓存02,使用数 ...

  3. 自定义MVC的Helper扩展方法

    记得在开发ASP.NET时候,也经常性使用C#可以写自己义的扩展方法,如:http://www.cnblogs.com/insus/p/3154363.html 或http://www.cnblogs ...

  4. 自定义MVC的Helper扩展方法 转 Insus.NET

    记得在开发ASP.NET时候,也经常性使用C#可以写自己义的扩展方法,如: http://www.cnblogs.com/insus/p/3154363.html 或http://www.cnblog ...

  5. ASP.NET + MVC5 入门完整教程四---MVC 中使用扩展方法

    https://blog.csdn.net/qq_21419015/article/details/80433640 1.示例项目准备1)项目创建新建一个项目,命名为LanguageFeatures ...

  6. Enum扩展及MVC中DropDownListFor扩展方法的使用

    public enum SearchState { /// <summary> /// 全部 /// </summary> [Description("全部" ...

  7. MVC 中使用扩展方法

     扩展方法(Extension Method)是给那些不是你拥有.因而不能直接修改的类添加方法的一种方便的办法. 一.使用扩展方法 1.定义一个购物车的类-ShoppingCart using Sys ...

  8. ASP.NET MVC之持久化TempData及扩展方法(十三)

    前言 之前在开始该系列之前我们就讲述了在MVC中从控制器到视图传递数据的四种方式,但是还是存在一点问题,本节就这个问题进行讲述同时进行一些练习来看看MVC中的扩展方法. 话题 废话不必多说,我们直接进 ...

  9. MVC 扩展方法特点

    .NET MVC 3中扩展方法特点: (1)扩展类的名称以Extensions结尾: (2)扩展类的类型是static: (3)扩展方法至少有一个参数,第一个参数必须指定该方法作用于哪个类型,并且该参 ...

随机推荐

  1. [RxJS] Drag and Drop example

    Improving our mouse drag event Our mouse drag event is a little too simple. Notice that when we drag ...

  2. SpannableString使用详解

    TextView算是android开发中最最常用的控件了,有的时候,我们要给一个TextView中的显示的文字设置不同的样式或者响应事件,比如同一个TextView中,有的字是红色,有的字是蓝色,有的 ...

  3. oracle学习----特殊的连接方式

    1.笛卡儿积 merge join cartesion SQL> select ename,dname from emp,dept; 已选择56行. 执行计划------------------ ...

  4. Android应用程序所包含的四种组件和DDMS

    关注用户组件         Activity                               编辑文本 .玩游戏 后台进程               Service           ...

  5. Mysql 半同步复制配置

    以下是配置和监控半同步复制: 1. 半同步复制功能以plugin的方式接入MySQL,需要在主库与从库两端同时开启半同步的支持,具体配置如下: On the master mysql> INST ...

  6. Mysql+keeplived+lvs

    最近要做个高可用的mysql.用mysql主主复制方式保证两台数据库的数据一致.结合lvs和keepalived一起使用(keepalived+lvs的设置会再另外一篇文章里写). 搭好环境之后,本人 ...

  7. oracle数据库入门sql语句

    数据库: 命名规范问题 依然是 _流.看来也确实应该抽空 来处理一下 今天吧,不行时间不能浪费.要更加专注.累了 就睡,醒来 就 好好 弄东西.白天 哪怕累一些,强度 大一些,晚上也可以抽空出去.溜溜 ...

  8. Java client 访问 memcached

    在测试项目中引入了memcached作为缓存层,以下是memcached的缓存配置和调用过程. linux下memcached安装过程 直接参考以前的博文linux下安装memcached过程  不再 ...

  9. ffmpeg之YUYV转RGB ARM使用流程分析

    本例基于3.2.2 ffmpeg 一.应用调用API 二.头文件包含的API接口 对应于libswscale.so.libswscale.so.4.libswscale.so.4.2.100中 sws ...

  10. 解读Spring Ioc容器设计图

    在Spring Ioc容器的设计中,有俩个主要的容器系列:一个是实现BeanFactory接口的简单容器系列,这系列容器只实现了容器最基本的功能:另外一个是ApplicationContext应用上下 ...