Asp.Net Mvc4分页,扩展HtmlHelper类

1.分页方法
 
using  System.Collections.Generic;
using  System.Collections.Specialized;
using  System.Linq;
using  System.Web;
using  System.Text;
using  System.Web.Mvc;
using  System.Web.Routing;
using  System.Data.Objects.DataClasses;
namespace  System.Web.Mvc
{
     public  static  class  PagerHelper
     {
         /// <summary>
         /// 分页
         /// </summary>
         /// <param name="helper"></param>
         /// <param name="id">分页id</param>
         /// <param name="currentPageIndex">当前页</param>
         /// <param name="pageSize">分页尺寸</param>
         /// <param name="recordCount">记录总数</param>
         /// <param name="htmlAttributes">分页头标签属性</param>
         /// <param name="className">分页样式</param>
         /// <param name="mode">分页模式</param>
         /// <returns></returns>
         public  static  string  Pager( this  HtmlHelper helper,  string  id,  int  currentPageIndex,  int  pageSize,  int  recordCount,  object  htmlAttributes,  string  className, PageMode mode)
         {
             TagBuilder builder =  new  TagBuilder( "table" );
             builder.IdAttributeDotReplacement =  "_" ;
             builder.GenerateId(id);
             builder.AddCssClass(className);
             builder.MergeAttributes( new  RouteValueDictionary(htmlAttributes));
             builder.InnerHtml = GetNormalPage(currentPageIndex, pageSize, recordCount, mode);
             return  builder.ToString();
         }
         /// <summary>
         /// 分页
         /// </summary>
         /// <param name="helper"></param>
         /// <param name="id">分页id</param>
         /// <param name="currentPageIndex">当前页</param>
         /// <param name="pageSize">分页尺寸</param>
         /// <param name="recordCount">记录总数</param>
         /// <param name="className">分页样式</param>
         /// <returns></returns>
         public  static  string  Pager( this  HtmlHelper helper,  string  id,  int  currentPageIndex,  int  pageSize,  int  recordCount,  string  className)
         {
             return  Pager(helper, id, currentPageIndex, pageSize, recordCount,  null , className, PageMode.Normal);
         }
         /// <summary>
         /// 分页
         /// </summary>
         /// <param name="helper"></param>
         /// <param name="id">分页id</param>
         /// <param name="currentPageIndex">当前页</param>
         /// <param name="pageSize">分页尺寸</param>
         /// <param name="recordCount">记录总数</param>
         /// <returns></returns>
         public  static  string  Pager( this  HtmlHelper helper,  string  id,  int  currentPageIndex,  int  pageSize,  int  recordCount)
         {
             return  Pager(helper, id, currentPageIndex, pageSize, recordCount,  null );
         }
         /// <summary>
         /// 分页
         /// </summary>
         /// <param name="helper"></param>
         /// <param name="id">分页id</param>
         /// <param name="currentPageIndex">当前页</param>
         /// <param name="pageSize">分页尺寸</param>
         /// <param name="recordCount">记录总数</param>
         /// <param name="mode">分页模式</param>
         /// <returns></returns>
         public  static  string  Pager( this  HtmlHelper helper,  string  id,  int  currentPageIndex,  int  pageSize,  int  recordCount, PageMode mode)
         {
             return  Pager(helper, id, currentPageIndex, pageSize, recordCount,  null , mode);
         }
         /// <summary>
         /// 分页
         /// </summary>
         /// <param name="helper"></param>
         /// <param name="id">分页id</param>
         /// <param name="currentPageIndex">当前页</param>
         /// <param name="pageSize">分页尺寸</param>
         /// <param name="recordCount">记录总数</param>
         /// <param name="className">分页样式</param>
         /// <param name="mode">分页模式</param>
         /// <returns></returns>
         public  static  string  Pager( this  HtmlHelper helper,  string  id,  int  currentPageIndex,  int  pageSize,  int  recordCount,  string  className, PageMode mode)
         {
             return  Pager(helper, id, currentPageIndex, pageSize, recordCount,  null , className, mode);
         }
         /// <summary>
         /// 获取普通分页
         /// </summary>
         /// <param name="currentPageIndex"></param>
         /// <param name="pageSize"></param>
         /// <param name="recordCount"></param>
         /// <returns></returns>
         private  static  string  GetNormalPage( int  currentPageIndex,  int  pageSize,  int  recordCount, PageMode mode)
         {
             int  pageCount = (recordCount % pageSize == 0 ? recordCount / pageSize : recordCount / pageSize + 1);
             StringBuilder url =  new  StringBuilder();
             url.Append(HttpContext.Current.Request.Url.AbsolutePath +  "?page={0}" );
             NameValueCollection collection = HttpContext.Current.Request.QueryString;
             string [] keys = collection.AllKeys;
             for  ( int  i = 0; i < keys.Length; i++)
             {
                 if  (keys[i].ToLower() !=  "page" )
                     url.AppendFormat( "&{0}={1}" , keys[i], collection[keys[i]]);
             }
             StringBuilder sb =  new  StringBuilder();
             sb.Append( "<tr><td>" );
             sb.AppendFormat( "总共{0}条记录,共{1}页,当前第{2}页  " , recordCount, pageCount, currentPageIndex);
             if  (currentPageIndex == 1)
                 sb.Append( "<span>首页</span> " );
             else
             {
                 string  url1 =  string .Format(url.ToString(), 1);
                 sb.AppendFormat( "<span><a href={0}>首页</a></span> " , url1);
             }
             if  (currentPageIndex > 1)
             {
                 string  url1 =  string .Format(url.ToString(), currentPageIndex - 1);
                 sb.AppendFormat( "<span><a href={0}>上一页</a></span> " , url1);
             }
             else
                 sb.Append( "<span>上一页</span> " );
             if  (mode == PageMode.Numeric)
                 sb.Append(GetNumericPage(currentPageIndex, pageSize, recordCount, pageCount, url.ToString()));
             if  (currentPageIndex < pageCount)
             {
                 string  url1 =  string .Format(url.ToString(), currentPageIndex + 1);
                 sb.AppendFormat( "<span><a href={0}>下一页</a></span> " , url1);
             }
             else
                 sb.Append( "<span>下一页</span> " );
 
             if  (currentPageIndex == pageCount)
                 sb.Append( "<span>末页</span> " );
             else
             {
                 string  url1 =  string .Format(url.ToString(), pageCount);
                 sb.AppendFormat( "<span><a href={0}>末页</a></span> " , url1);
             }
             return  sb.ToString();
         }
         /// <summary>
         /// 获取数字分页
         /// </summary>
         /// <param name="currentPageIndex"></param>
         /// <param name="pageSize"></param>
         /// <param name="recordCount"></param>
         /// <param name="pageCount"></param>
         /// <param name="url"></param>
         /// <returns></returns>
         private  static  string  GetNumericPage( int  currentPageIndex,  int  pageSize,  int  recordCount,  int  pageCount,  string  url)
         {
             int  k = currentPageIndex / 10;
             int  m = currentPageIndex % 10;
             StringBuilder sb =  new  StringBuilder();
             if  (currentPageIndex / 10 == pageCount / 10)
             {
                 if  (m == 0)
                 {
                     k--;
                     m = 10;
                 }
                 else
                     m = pageCount % 10;
             }
             else
                 m = 10;
             for  ( int  i = k * 10 + 1; i <= k * 10 + m; i++)
             {
                 if  (i == currentPageIndex)
                     sb.AppendFormat( "<span><font color=red><b>{0}</b></font></span> " , i);
                 else
                 {
                     string  url1 =  string .Format(url.ToString(), i);
                     sb.AppendFormat( "<span><a href={0}>{1}</a></span> " , url1, i);
                 }
             }
 
             return  sb.ToString();
         }
     }
     /// <summary>
     /// 分页模式
     /// </summary>
     public  enum  PageMode
     {
         /// <summary>
         /// 普通分页模式
         /// </summary>
         Normal,
         /// <summary>
         /// 普通分页加数字分页
         /// </summary>
         Numeric
     }
}

  html代码

1
2
3
<div id= "pageNav"  class = "pageinator" >
       @Html.ShowPageNavigate(( int )ViewData[ "pageindex" ], ( int )ViewBag.pageSize, ( int )ViewBag.totalCount);
   </div>

  控制器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
shopEntities shop =  new  shopEntities();
      public  ActionResult Index()
      {
          //IQueryable<tbl_order> order = (from a in shop.tbl_order select a).OrderBy(a=>a.id).Skip(10).Take(10);
          //ViewData["order"] = order;
          //return View();
 
          int  pageIndex = Request[ "pageIndex" ] ==  null  ? 1 :  int .Parse(Request[ "pageIndex" ]);
          int  pageSize = Request[ "pageSize" ] ==  null  ? 10 :  int .Parse(Request[ "pageSize" ]);
          int  totalCount = 0;
 
          //给前台传递  分页的参数数据
          ViewData[ "pageIndex" ] = pageIndex;
          //ViewData["pageSize"] = pageSize;
          ViewBag.pageSize = pageSize;
          //总条数
          totalCount = shop.tbl_order.Count();
          ViewBag.totalCount = totalCount;
 
          //把当前页面数据发送到前台。
          //ViewData.Model = db.UserInfo.ToList();
          //List<tbl_order> pp = shop.tbl_order
          //                   .OrderBy(u => u.id)
          //                   .Skip((pageIndex - 1) * pageSize)
          //                   .Take(pageSize).ToList();
 
          IQueryable<tbl_order> pp = shop.tbl_order
                            .OrderBy(u => u.id)
                            .Skip((pageIndex - 1) * pageSize)
                            .Take(pageSize);
          return  View(pp);
      }

 

 

 

转载于:https://www.cnblogs.com/louby/p/4791937.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值