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. IMP 导入数据报错 OCI-21500 OCI-22275

    IMP导入数据报错如下: OCI-21500: internal error code, arguments: [kgepop: no error frame to pop to], [], [], ...

  2. Default route and zero route

    A default route of a computer that is participating in computer networking is the packet forwarding ...

  3. ThinkPHP函数详解:R方法

    R方法用于调用某个控制器的操作方法,是A方法的进一步增强和补充.关于A方法的用法见这里.R方法的调用格式:R('[项目://][分组/]模块/操作','参数','控制器层名称') 例如,我们定义了一个 ...

  4. Unity3D NGUI学习(一)血条

    这次来讲讲Unity3D NGUI这个插件的学习,这个插件是收费的,不过去网上可以下载得很多可用版本.用来做用户的交互UI,学习起来比较简单 第一步,导入NGUI包 http://pan.baidu. ...

  5. Google Developers中国网站发布!(转)

    Google Developers 中国网站是特别为中国开发者而建立的,它汇集了 Google 为全球开发者所提供的开发技术资源,包括 API 文档.开发案例.技术培训的视频.并涵盖了以下关键开发技术 ...

  6. WPF:保存窗口当前状态截图方法

    在制作软件使用手册或者操作示范市,比较常用方式有截图和视频制作.如果软件内置当前状态的截图和操作视频的导出功能,则将极大简化这方面的工作.使用wpf编写的UI界面,截图的导出功能逻辑相对简单,通用的实 ...

  7. Implicit conversion from enumeration type 'enum CGImageAlphaInfo' to different enumeration type 'CGB

    Implicit conversion from enumeration type 'enum CGImageAlphaInfo' to different enumeration type 'CGB ...

  8. java新手笔记11 类的静态属性、方法(单例)

    1.Person类 package com.yfs.javase; public class Person { String name;//每个对象上分配 与对象绑定 int age; char se ...

  9. 10.15_SVG可以解决问题吗

    (1)淘宝开放平台. (2)Teiid是一个数据虚拟化系统.Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架.Apache Jackrabbit. (3)SVG:百度百科.SVG.js .Sn ...

  10. bzoj1260[CQOI2007]涂色paint

    思路:区间dp,用f[i][j]表示区间[i,j]的答案,然后转移即可. #include<iostream> #include<cstdio> #include<cst ...