zoukankan      html  css  js  c++  java
  • 自学MVC(十):自己写的通用的JS分页控件2009年05月27日

       在asp.net webform 里有很多分页控件,比如aspnetpager等.然后在mvc开发模式下,这些控件不太合适了,所以我就自己写了一个.
                  第一个版本,有刷新 htmlhelper版:
                  这里用了c#3.0里的扩展方法.
                  public static class CutePage
                {
        
            /// <summary>  
            /// 分页Pager显示  
            /// </summary>  
            /// <param name="html"></param>  
            /// <param name="currentPageStr">标识当前页码的QueryStringKey</param>  
            /// <param name="pageSize">每页显示</param>  
            /// <param name="totalCount">总数据量</param>  
            /// <returns></returns>
            public static string Pager(this HtmlHelper html, string currentPageStr, int pageSize, int totalCount)
            {
                var queryString = html.ViewContext.HttpContext.Request.QueryString;
                int currentPage = 1; //当前页  
                var totalPages = Math.Max((totalCount + pageSize - 1) / pageSize, 1); //总页数  
                var dict = new System.Web.Routing.RouteValueDictionary(html.ViewContext.RouteData.Values);
                var output = new System.Text.StringBuilder();
                if (!string.IsNullOrEmpty(queryString[currentPageStr]))
                {
                    //与相应的QueryString绑定
                    foreach (string key in queryString.Keys)
                        if (queryString[key] != null && !string.IsNullOrEmpty(key))
                            dict[key] = queryString[key];
                    int.TryParse(queryString[currentPageStr], out currentPage);
                }
                else
                {
                    //如果是第一次访问本页,没有currentPageStr参数,添加currentPageStr=1
                    if (!dict.ContainsKey(currentPageStr))
                    {
                        dict.Add(currentPageStr, 1);
                    }
                    int.TryParse(dict[currentPageStr].ToString(), out currentPage);
                }
                if (currentPage <= 0) currentPage = 1;
                if (totalPages > 1)
                {
                    if (currentPage != 1)
                    {
                        //处理首页连接  
                        dict[currentPageStr] = 1;
                        output.AppendFormat("{0} ", html.RouteLink("首页", dict));
                    }
                    if (currentPage > 1)
                    {
                        //处理上一页的连接  

                        dict[currentPageStr] = currentPage - 1;
                        output.Append(html.RouteLink("上页", dict));
                    }
                    else
                    {
                        output.Append("上页");
                    }
                    output.Append(" ");
                    int currint = 5;
                    for (int i = 0; i <= 10; i++)
                    {
                        //一共最多显示10个页码,前面5个,后面5个  
                        if ((currentPage + i - currint) >= 1 && (currentPage + i - currint) <= totalPages)
                            if (currint == i)
                            {
                                //当前页处理  
                                output.Append(string.Format("{0}", currentPage));
                            }
                            else
                            {
                                //一般页处理
                                dict[currentPageStr] = currentPage + i - currint;
                                output.Append(html.RouteLink((currentPage + i - currint).ToString(), dict));
                            }
                        output.Append(" ");
                    }
                    if (currentPage < totalPages)
                    {
                        //处理下一页的链接
                        dict[currentPageStr] = currentPage + 1;
                        output.Append(html.RouteLink("下页", dict));
                    }
                    else
                    {
                        output.Append("下页");
                    }
                    output.Append(" ");
                    if (currentPage != totalPages)
                    {
                        dict[currentPageStr] = totalPages;
                        output.Append(html.RouteLink("末页", dict));
                    }
                    output.Append(" ");
                }
                output.AppendFormat("{0} / {1}", currentPage, totalPages);//这个统计加不加都行
                return output.ToString();
            }

        }

    在页面上的调用方式 <%= Html.Pager("pageindex",10,itemscout)%>

      当然我下面要隆重推出无刷新Jquery版的分页控件:
            /*生成分页导航
             pageindex--当前页索引
            pageSize --每页多少行数据
            totalCount--总行数
            ajaxMethod--jquery写的无刷新获取数据的js方法
             target---分页在页面输出的页面元素,比如<div>里
        */
    function initePageNav(pageindex,pageSize,totalCount,ajaxMethod,target) {
      
                var currentPage =pageindex+1; //当前页  
                var totalPages = parseInt((totalCount + pageSize - 1) / pageSize); //总页数  
                var output="";
                output += "第" + ((currentPage - 1) * pageSize + 1) + "-" + currentPage * pageSize + "条  " + "共" + totalCount + "条";
                output += "  ";
                if (currentPage <= 0) currentPage = 1;
                if (totalPages > 1)
                {
                    if (currentPage != 1)
                    {
                        //处理首页连接
                        output += "<a href=\"javascript:" + ajaxMethod + "(0)\">首页</a>";
                    }
                    output += "  ";
                    if (currentPage > 1)
                    {
                        //处理上一页的连接
                        output += "<a href=\"javascript:" + ajaxMethod + "(" + (currentPage - 2) + ")\">上页</a>";
                    }
                    else
                    {
                        output+="上页";
                    }
                    output += "  |  ";
                    var currint = 5;
                    for (var i = 0; i <= 10; i++)
                    {
                        //一共最多显示10个页码,前面5个,后面5个  
                        if ((currentPage + i - currint) >= 1 && (currentPage + i - currint) <= totalPages)
                            if (currint == i)
                            {
                                //当前页处理
                                output += currentPage;
                                output += "  ";
                            }
                            else
                            {
                                //一般页处理
                                output += "<a href=\"javascript:" + ajaxMethod + "(" + (currentPage + i - currint - 1) + ")\">" + (currentPage + i - currint) + "</a>";
                                output += "  ";
                            }
                          
                  
                    }
                    if (currentPage < totalPages)
                    {
                        //处理下一页的链接
                        output += "|  <a href=\"javascript:" + ajaxMethod + "(" + (currentPage) + ")\">下页</a>";
                    }
                    else
                    {
                        output += "|  下页";
                    
                    }
                    output += "  ";
                    if (currentPage != totalPages)
                    {
                
                        output+="<a href=\"javascript:"+ajaxMethod+"("+(totalPages-1)+")\">末页</a>";
                    }
                    output += "  </span>";
                }
                if (totalCount>0)
                {
                $("#"+target).text("");
                $("#" + target).append(output);

                }
            }

    这个函数配合无刷新取数据的方法如下使用:
    <script language="javascript">
          $().ready(function() {
             //页面初始化时获取评论内容
            
    getComments(0);    
            

         });
         //获取评论内容
         function getComments(pageindex) {
             $.post("http://www.cnblogs.com/Services/GetComments.ashx", { Mid: <%= Model.Mid  %>, PageIndex: pageindex, PageSize: 10},
      function(data, textStatus) {
             $("#videobodycommentlist").text("");//先清空页面数据的内容
          $("#videobodycommentlist").append(data.result);//把获取好的数据填充
               initePageNav(pageindex,10,data.count,"getComments","commentPage");//调用JS分页方法
      }, "json");
         }

    </script>
  • 相关阅读:
    2、netlink简介
    1、netlink 连接器 通信机制
    第一章 02 谈谈static关键词
    第一章 01 namespace 命名空间
    第一章 00 StringUtil.cpp和StringUtil.hh分析
    说说log4cplus
    Jq 操作json
    怪怪的bug,提示值不能为空,连action都不进
    浏览器兼容性部分---FF&IE678
    Jquery 随笔
  • 原文地址:https://www.cnblogs.com/wangergo/p/1507366.html
Copyright © 2011-2022 走看看