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. Java-WebSocket

    A barebones WebSocket client and server implementation written in 100% Java. http://java-websocket.o ...

  2. [Javascript] Implement zip function

    1. Use a for loop to traverse the videos and bookmarks array at the same time. For each video and bo ...

  3. iOS开发中一些常用的方法

    1.压缩图片 #pragma mark 处理图片 - (void)useImage:(UIImage *)image { NSLog(@"with-----%f heught-----%f& ...

  4. Ubuntu上架设PPPoE Server

    一.安裝 PPPoE Server Software1)sudo apt-get install ppp2)rp-pppoe(非apt套件)wget -c http://www.roaringpeng ...

  5. Interesting visualization tools for profiling.

    Interesting visualization tools for profiling. http://dtrace.org/blogs/brendan/2012/03/17/linux-kern ...

  6. Android(java)学习笔记140:SpannableString类的使用

    我们之前说过了我们想实现在TextView组件之中,可以显示URL.Email等特殊信息,这些信息点击可以实现跳转,真正意义上的超链接 要实现上面的需求就要SpannableString这个类. 因为 ...

  7. HTML左边和右边是固定的宽度但是中间是自动的布局方式

    对于这个布局方式我们可以是用绝对定位的方式来实现这个效果 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

  8. Leetcode Python Solution(continue update)

    leetcode python solution 1. two sum (easy) Given an array of integers, return indices of the two num ...

  9. NET环境下的未处理异常(unhandled exception)的解决方案

    NET环境下的未处理异常(unhandled exception )的解决方案 .Net 框架提供了非常强大的异常处理机制,同时对一些非托管代码很难控制的系统问题比如指针越界,内存泄漏等提供了很好的解 ...

  10. ajax跨域访问 java controller 和 cxf(webservice) 配置方式(CORS)

    1. controller跨域访问,配置方式 重点在这里: <mvc:cors> <mvc:mapping path="/*" allowed-origins=& ...