`

自学MVC(十):自己写的通用的JS分页控件-2009年05月27日

    博客分类:
  • MVC
阅读更多

在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>

<!--v:3.2-->

   本文版权属于www.51kancctv.com,williams所有,首发http://www.cnblogs.com/,转载请注明出处。
分享到:
评论
2 楼 早上好朋友 2011-10-05  
引用
1 楼 早上好朋友 2011-10-05  
[flash=200,200][/flash][url][/url][img][/img]

    [*]
引用
[u][/u][i][/i]
引用

    [*]
[img][/img][flash=200,200][/flash]

相关推荐

    ERP系统信息化资料:自学SAP教材资料CO--Suntech 配置文档Configuration Manual V01.doc

    ERP系统信息化资料:自学SAP教材资料CO--Suntech 配置文档Configuration Manual V01.doc

    Html+Css+Javascript从入门到精通.pdf

    - **综合应用**:利用JavaScript制作一个功能完善的日历控件。 #### 第四部分:综合应用——建立你自己的网站 **第二十三章:建立你自己的网站** - **项目规划**:确定网站的目标和内容。 - **设计布局**:使用...

    .net自学案例文档

    ### .NET自学案例知识点概述 #### 一、窗体基本操作 **知识点1:窗体的基本用法** - **描述**:本节介绍如何创建、显示和关闭窗体。 - **实现方法**: - 创建一个新的窗体实例。 - 使用`Show()`方法显示窗体。 -...

    高等教育自学考试全统考课程新编或修订的考试大纲教材宣贯.pdf

    【高等教育自学考试全统考课程新编或修订的考试大纲教材宣贯】 高等教育自学考试是一项全国统一的高等教育形式,旨在为非在校人员提供提升学历的机会。考试大纲和教材是自学考试的重要组成部分,它们规定了考试内容...

    SAP BC410 课程中文自学笔记

    ### SAP BC410 课程中文自学笔记知识点总结 #### 一、课程概览与目标 - **课程名称**:SAP BC410 - 开发用户对话 - **目标**: - 编写动态屏幕处理程序 - 使用SAP系统中的不同屏幕元素编写用户会话 - **学习成果*...

    数学建模竞赛+自学指导建议.doc

    ### 数学建模竞赛+自学指导建议 #### 一、数学建模竞赛概述与自学指导建议 ##### 数学建模简介: 数学建模是指通过抽象实际问题为数学问题,运用数学的方法来解决实际问题的过程。它广泛应用于科学研究、工程技术...

    《98王码自学教材》作者: 王永民 出版年: 1999年

    98王码自学教材 作者: 王永民出版社: 气象出版社 出版年: 1999ISBN:7-5029-2674-7 简介: 全书分为四个部分,第一部分介绍了"98版五笔字型"的基础知识;第二部分是本书的核心,"五笔字型"的编码规则及学习"诀窍"都在这...

    db2通用数据库自学教程

    db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用...

    Java开源项目之「自学编程之路」:学习指南+面试指南+资源分享+技术文章

    # Java开源项目之「自学编程之路」 ## 简介 「自学编程之路」是一个致力于 Java 编程学习的开源项目,提供了全面的学习指南、面试指南、资源分享和技术文章,帮助自学者快速掌握 Java 编程技术。这一项目整合了从...

    网上最全!自考《C++程序设计》历年(2000年10月-2009年1月)全国试卷真题及答案

    本资源包含了高等教育自学考试《C++程序设计》(课程代码:04737)2000年10月至2009年1月的各次正考、增考的全国试卷及其参考答案。 注: (1) 这门课程的前身是《面向对象程序设计》(课程代码:02328),直到...

    java自学资料

    8:判断输入文本是否全是半角空格js 9:java中金额的精确计算问题 10:有关继承的要点 11:有关继承的问题 12;有关static、final的基本规则 13:有关数组的知识点 14:数组的拷贝 15:数组中插入法实现排序 16:Object类 ...

    MVC自学网址

    自学mvc的最好的资料,配有教学视频,学习资料,以及附带了一个mvc项目实例,可以一边做项目,一边学习mvc可以全面学习mvc,学习完这个网址的全部东西,相信你的mvc可以去公司用mvc开发项目了。

    自己写的js`动画等控件类

    在JavaScript的世界中,动画和控件的实现是前端...总之,"自己写的js动画等控件类"是一个宝贵的自学资源,它可以帮助开发者提升JavaScript动画和控件开发的专业技能,并且能够激发创新思维,创造出更丰富的用户体验。

    spring-mvc 自学文档(我自己总结的)

    本自学文档主要介绍了Spring MVC的基本概念和核心组件,适合初学者掌握其基本工作原理。 1. DispatcherServlet(前端控制器) DispatcherServlet是Spring MVC的入口点,它充当着整个框架的前端控制器角色。在web....

    javascript实例自学手册:486个实例电子版(包括例子)

    作为“javascript实例自学手册”的一部分,这个压缩包包含486个实例,旨在帮助初学者通过实践来理解和掌握JavaScript的核心概念。 1. **基础语法** - 变量声明:在JavaScript中,我们使用`var`、`let`或`const`来...

    自学javascript教程(共24个ppt)

    这个“自学javascript教程”提供了全面的学习路径,帮助初学者从零开始掌握JavaScript的核心概念和技术。以下是对24个PPT内容的详细概述: 1. **PPT1:JavaScript简介** - 介绍JavaScript的历史、作用以及它与HTML...

    《C#完全自学手册电子图书》\第4章 Windows窗体常用控件

    ### C#完全自学手册电子图书 – 第4章 Windows窗体常用控件 #### 4.1 Windows窗体 **窗体(Form)**是Windows桌面应用程序的基础构建单元。它本质上是一块空白画布,开发人员可以在此基础上添加各种控件以创建用户...

    Eclipse RCP Plug-in开发自学教程(Eclipse3.6)

    【Eclipse RCP 插件开发自学教程 (Eclipse3.6)】 Eclipse RCP (Rich Client Platform) 是一个框架,允许开发者构建高度可定制和可扩展的桌面应用程序。本教程是针对Eclipse 3.6版本的,提供了一个详细的学习路径,...

    日语学习网站自学很好用

    标题中的“日语学习网站自学很好用”表明这是一个关于利用在线资源进行日语自我学习的讨论。描述简单地推荐了这些资源,暗示它们对于想要学习日语的人来说是实用且有效的。 从标签“日语”我们可以确认这个话题是...

Global site tag (gtag.js) - Google Analytics