绑定路由的MVC2分页扩展

  许久没写博客,结果越变越懒。杯具到,一年一篇博文的惨淡下场。以后还是要多写点东西,不然别人以为你那个啥。。呵呵

 

  年初玩了一下MVC,还是因为懒,没下MVC3,直接用自带的MVC2。哪个版本更这分页扩展没多大关系,这边共享一下这个分页的扩展。在写之前看了下,他们都是request,页面参数。实在不美观。so..果断改之

 

View Code
  1  /* ******************************************************************
  2 
  3   * * Copyright (C) Kurodo
  4 
  5   * * All rights reserved.
  6 
  7   * *
  8 
  9   * Author:   Kurodo
 10 
 11   * Create Date:2011-3-18 8:55:54
 12 
 13   * Description:PagerExtensions.cs
 14 
 15   * *
 16 
 17   * * Date         Author               Description
 18 
 19   * **************************************************************** */
 20 
 21  using  System;
 22  using  System.Collections.Generic;
 23  using  System.Linq;
 24  using  System.Web;
 25  using  System.Web.Mvc;
 26  using  System.Web.Routing;
 27  using  System.Web.Mvc.Html;
 28  using  System.Text;
 29 
 30  namespace  Kurodo.Extensions
 31  {
 32       ///   <summary>
 33       ///  分页扩展
 34       ///   </summary>
 35       public   static   class  PagerExtensions
 36      {
 37           ///   <summary>
 38           ///  分页Pager显示             
 39           ///   </summary>               
 40           ///   <param name="html"></param>              
 41           ///   <param name="keyWord"> 标识当前页码的参数 </param>               
 42           ///   <param name="pageSize"> 每页显示 </param>              
 43           ///   <param name="totalCount"> 总数据量 </param>              
 44           ///   <returns></returns>
 45           public   static  MvcHtmlString Pager( this  HtmlHelper html,  string  keyWord,  int  pageSize,  int  totalCount)
 46          {
 47               int  currentPage  =   1 // 当前页
 48              var totalPages  =  Math.Max((totalCount  +  pageSize  -   1 /  pageSize,  1 );  // 总页数
 49              var routeMap  =   new  System.Web.Routing.RouteValueDictionary(html.ViewContext.RouteData.Values);
 50              var output  =   new  System.Text.StringBuilder();
 51 
 52               if  (routeMap[keyWord]  !=   null )
 53              {
 54                   int .TryParse(routeMap[keyWord].ToString(),  out  currentPage);
 55              }
 56 
 57               if  (currentPage  <=   0 )
 58                  currentPage  =   1 ;
 59               if  (totalPages  >   1 )
 60              {
 61                   if  (currentPage  !=   1 )
 62                  {
 63                       // 处理首页连接
 64                      routeMap[keyWord]  =   1 ;
 65                      output.AppendFormat( " {0}  " , html.RouteLink( " 首页 " , routeMap));
 66                  }
 67                   if  (currentPage  >   1 )
 68                  {
 69                       // 处理上一页的连接
 70                      routeMap[keyWord]  =  currentPage  -   1 ;
 71                      output.Append(html.RouteLink( " 上一页 " , routeMap));
 72                  }
 73                   else
 74                  {
 75                      output.Append( " 上一页 " );
 76                  }
 77                  output.Append( "   " );
 78                   int  currint  =   5 ;
 79                   for  ( int  i  =   0 ; i  <=   10 ; i ++ )
 80                  {
 81                       // 一共最多显示10个页码,前面5个,后面5个
 82                       if  ((currentPage  +  i  -  currint)  >=   1   &&  (currentPage  +  i  -  currint)  <=  totalPages)
 83                           if  (currint  ==  i)
 84                          {
 85                               // 当前页处理
 86                              output.Append( string .Format( " <span class\"now\">{0}</span> " , currentPage));
 87                          }
 88                           else
 89                          {
 90                               // 一般页处理
 91                              routeMap[keyWord]  =  currentPage  +  i  -  currint;
 92                              output.Append(html.RouteLink((currentPage  +  i  -  currint).ToString(), routeMap));
 93                          }
 94                      output.Append( "   " );
 95                  }
 96 
 97                   if  (currentPage  <  totalPages)
 98                  {
 99                       // 处理下一页的链接
100                      routeMap[keyWord]  =  currentPage  +   1 ;
101                      output.Append(html.RouteLink( " 下一页 " , routeMap));
102                  }
103                   else
104                  {
105                      output.Append( " 下一页 " );
106                  }
107                  output.Append( "   " );
108                   if  (currentPage  !=  totalPages)
109                  {
110                      routeMap[keyWord]  =  totalPages;
111                      output.Append(html.RouteLink( " 末页 " , routeMap));
112                  }
113                  output.Append( "   " );
114              }
115              output.AppendFormat( " {0} / {1} " , currentPage, totalPages); // 这个统计加不加都行
116 
117               return  MvcHtmlString.Create(output.ToString());
118          }
119      }
120  }

 

然后在视图上这样调用即可

 

<% :Html.Pager( " page " , 20 ,TotalCount)  %>

 

如果你是MVC3,就是这样

 

@Html.Pager( " page " , 20 ,TotalCount)

 

 

你可能感兴趣的:(mvc)