MVc分页【关于使用扩展方法实现MVc分页】

近期对MVc自定义分页作了一下小研究下面把他记下来

下述代1,2,3里面的代码可以直接拷贝,4以后的根据情况自己选定

1.在后台任写如下的扩展方法(任一类库都可以,但是用时得引用命名空间)

// 添加using System.Web;     using System.Web.Mvc; 引用,找不到可以从MVC层拷贝
namespace System.Web.Mvc.Html  // 注意一定要把类的命名空间写成System.Web.Mvc.Html
{
    public static class PageExtensioncs    // 一定要是静态类
    {
        // 一定要是静态方法
        public static HtmlString ShowPageNavigate(this HtmlHelper htmlHelper, int currentPage, int pageSize, int totalCount)
        {

            var redirectTo = htmlHelper.ViewContext.RequestContext.HttpContext.Request.Url.AbsolutePath;

            pageSize = pageSize == 0 ? 3 : pageSize;    // 显示条数设置

            var totalPages = Math.Max((totalCount + pageSize - 1) / pageSize, 1); //总页数

            var output = new StringBuilder();

            if (totalPages > 1)
            {

                output.AppendFormat("<a class=‘pageLink‘ href=‘{0}?pageIndex=1&pageSize={1}‘>首页</a> ", redirectTo, pageSize);

                if (currentPage > 1)
                {//处理上一页的连接

                    output.AppendFormat("<a class=‘pageLink‘ href=‘{0}?pageIndex={1}&pageSize={2}‘>上一页</a> ", redirectTo, currentPage - 1, pageSize);

                }
                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.AppendFormat("<a class=‘cpb‘ href=‘{0}?pageIndex={1}&pageSize={2}‘>{3}</a> ", redirectTo, currentPage, pageSize, currentPage);

                        }

                        else
                        {//一般页处理

                            output.AppendFormat("<a class=‘pageLink‘ href=‘{0}?pageIndex={1}&pageSize={2}‘>{3}</a> ", redirectTo, currentPage + i - currint, pageSize, currentPage + i - currint);

                        }

                    }

                    output.Append(" ");
                }

                if (currentPage < totalPages)
                {//处理下一页的链接

                    output.AppendFormat("<a class=‘pageLink‘ href=‘{0}?pageIndex={1}&pageSize={2}‘>下一页</a> ", redirectTo, currentPage + 1, pageSize);

                }
                output.Append(" ");

                if (currentPage != totalPages)
                {

                    output.AppendFormat("<a class=‘pageLink‘ href=‘{0}?pageIndex={1}&pageSize={2}‘>末页</a> ", redirectTo, totalPages, pageSize);

                }

                output.Append(" ");

            }

            output.AppendFormat("<label>第{0}页 / 共{1}页</label>", currentPage, totalPages);//这个统计加不加都行
            return new HtmlString(output.ToString());

        }
    }
}

2.添加分页信息类

namespace SysCommon
{
    public class PagerInfo
    {
        /// <summary>
        /// 总记录数
        /// </summary>
        public int RecordCount { get; set; }

        /// <summary>
        /// 当前页码
        /// </summary>
        public int CurrentPageIndex { get; set; }

        /// <summary>
        /// 显示条数
        /// </summary>
        public int PageSize { get; set; }

    }
}

3.添加泛型对像叠加类(这里的这种用法很值得学习)

namespace SysCommon
{
    public class PagerQuery<TPager, TEntityList>
    {

        public PagerQuery(TPager pager, TEntityList entityList)
        {

            this.Pager = pager;

            this.EntityList = entityList;

        }

        public TPager Pager { get; set; }

        public TEntityList EntityList { get; set; }

    }
}

上述代1,2,3里面的代码可以直接拷贝

4.在Controller中代码如下 (注意)

        public ActionResult Index(int? pageSize,int? pageIndex)
        {
            List<UserInfo> list = new List<UserInfo>();
            UserInfo u1 = new UserInfo { Uid=1,UserName="zs",TrueName="张三"};
            list.Add(u1);
            UserInfo u2 = new UserInfo { Uid = 2, UserName = "zs2", TrueName = "张三2" };
            list.Add(u2);
            UserInfo u3 = new UserInfo { Uid = 3, UserName = "zs3", TrueName = "张三3" };
            list.Add(u3);
            UserInfo u4 = new UserInfo { Uid = 4, UserName = "zs4", TrueName = "张三4" };
            list.Add(u4);
            UserInfo u5 = new UserInfo { Uid = 5, UserName = "zs5", TrueName = "张三5" };
            list.Add(u5);
            UserInfo u6 = new UserInfo { Uid = 6, UserName = "zs6", TrueName = "张三6" };
            list.Add(u6);
            UserInfo u7 = new UserInfo { Uid = 7, UserName = "zs7", TrueName = "张三7" };
            list.Add(u7);
            UserInfo u8 = new UserInfo { Uid = 8, UserName = "zs8", TrueName = "张三8" };
            list.Add(u8);
            UserInfo u9 = new UserInfo { Uid = 9, UserName = "zs9", TrueName = "张三9" };
            list.Add(u9);
            UserInfo u10 = new UserInfo { Uid = 10, UserName = "zs10", TrueName = "张三10" };
            list.Add(u10);
            UserInfo u11 = new UserInfo { Uid = 11, UserName = "zs11", TrueName = "张三11" };
            list.Add(u11);
            UserInfo u12 = new UserInfo { Uid = 12, UserName = "zs12", TrueName = "张三12" };
            list.Add(u12);
            UserInfo u13 = new UserInfo { Uid = 13, UserName = "zs13", TrueName = "张三13" };
            list.Add(u13);
            UserInfo u14 = new UserInfo { Uid = 14, UserName = "zs14", TrueName = "张三14" };
            list.Add(u14);
            UserInfo u15 = new UserInfo { Uid = 15, UserName = "zs15", TrueName = "张三15" };
            list.Add(u15);
            UserInfo u16 = new UserInfo { Uid = 16, UserName = "zs16", TrueName = "张三16" };
            list.Add(u16);
            UserInfo u17 = new UserInfo { Uid = 17, UserName = "zs17", TrueName = "张三17" };
            list.Add(u17);
            UserInfo u18 = new UserInfo { Uid = 18, UserName = "zs18", TrueName = "张三18" };
            list.Add(u18);
            UserInfo u19 = new UserInfo { Uid = 19, UserName = "zs19", TrueName = "张三19" };
            list.Add(u19);
            UserInfo u20 = new UserInfo { Uid = 20, UserName = "zs20", TrueName = "张三20" };
            list.Add(u20);
            UserInfo u21 = new UserInfo { Uid = 21, UserName = "zs21", TrueName = "张三21" };
            list.Add(u21);
            UserInfo u22 = new UserInfo { Uid = 22, UserName = "zs22", TrueName = "张三22" };
            list.Add(u22);
            UserInfo u23 = new UserInfo { Uid = 23, UserName = "zs23", TrueName = "张三23" };
            list.Add(u23);
            UserInfo u24 = new UserInfo { Uid = 24, UserName = "zs24", TrueName = "张三24" };
            list.Add(u24);
            UserInfo u25 = new UserInfo { Uid = 25, UserName = "zs25", TrueName = "张三25" };
            list.Add(u25);
            UserInfo u26 = new UserInfo { Uid = 26, UserName = "zs26", TrueName = "张三26" };
            list.Add(u26);
            PagerInfo p = new PagerInfo();
            int pageIndex1 = pageIndex ?? 1;    // 重置或获取当前页默认值
            int pageSize1 = pageSize ?? 2;      // 重置或获取显示条数
            List<UserInfo> list2 = list.Skip((pageIndex1 - 1) * pageSize1).Take(pageSize1).ToList();   // 取页面显示的数据
            p.PageSize = pageSize1;    // 设置页码
            p.RecordCount = list.Count;    // 设置总记录数
            p.CurrentPageIndex = pageIndex1; // 设置当前页码             // 实例化合并泛型,获取数据
            PagerQuery<PagerInfo, List<UserInfo>> pgaequery = new PagerQuery<PagerInfo, List<UserInfo>>(p, list2);
            return View(pgaequery);   // 返回数据
        }

5.View 视图中的显示代码 重点@Html.ShowPageNavigate(Model.Pager.CurrentPageIndex, Model.Pager.PageSize, Model.Pager.RecordCount)

@using SysModels
@using SysCommon
@model PagerQuery<PagerInfo,List<UserInfo>>
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@section Head{

}
<div style=" width:100%;">
    <table style="margin:0 auto;">
        <thead>
            <tr>
                <th>用户ID</th>
                <th>用户名</th>
                <th>真实姓名</th>
                <th>Email</th>
                <th>English</th>
                <th>Tell</th>
            </tr>
        </thead>
        <tbody>
            @foreach (UserInfo u in Model.EntityList)
            {
                <tr>
                    <td>@u.Uid</td>
                    <td>@u.UserName</td>
                    <td>@u.TrueName</td>
                    <td>@u.Email</td>
                    <td>@u.EnglishName</td>
                    <td>@u.Tell</td>
                </tr>
            }
        </tbody>
    </table>
    <div class="paginator" style=" width:600px;margin:0 auto;">
        @Html.ShowPageNavigate(Model.Pager.CurrentPageIndex, Model.Pager.PageSize, Model.Pager.RecordCount)
    </div>
</div>

6. 可以加上样式 代码如下

<style type="text/css">
.paginator
 {
     font: 14px Arial, Helvetica, sans-serif;
     padding: 10px 20px 10px 0;
     margin: 0px auto;
 }

 .paginator a
 {
     border: solid 1px #ccc;
     color: #0063dc;
     cursor: pointer;
     text-decoration: none;
 }

 .paginator a:visited
 {
     padding: 1px 6px;
     border: solid 1px #ddd;
     background: #fff;
     text-decoration: none;
 }

 .paginator .cpb
 {
     border: 1px solid #F50;
     font-weight: 700;
     color: #F50;
     background-color: #ffeee5;
 }

 .paginator a:hover
 {
     border: solid 1px #F50;
     color: #f60;
     text-decoration: none;
 }

 .paginator a, .paginator a:visited, .paginator .cpb, .paginator a:hover
 {
     float: left;
     height: 20px;
     line-height: 20px;
     min-width: 14px;
     _width: 14px;
     margin-right: 5px;
     text-align: center;
     white-space: nowrap;
     font-size: 14px;
     font-family: Arial,SimSun;
     padding: 0 3px;
 }

 .paginator label
 {
     display:block;
     float:left;
     margin-top:4px;
 }

    </style>

7.显示效果如下

本文原于   *滴血* 的博客,只是根据本人自己的实例做了更详细的阐述.

*滴血* 文章参考:http://www.cnblogs.com/ChengPuYuan/p/3715412.html

时间: 2024-12-21 10:37:15

MVc分页【关于使用扩展方法实现MVc分页】的相关文章

ASP.NET MVC学前篇之扩展方法、链式编程

前言 目的没有别的,就是介绍几点在ASP.NETMVC 用到C#语言特性,还有一些其他琐碎的知识点,强行的划分一个范围的话,只能说都跟MVC有关,有的是外围的知识,有的是包含在框架内的. MVC学前篇字样?有噱头的成分也有真实的成分,所以工欲善其事,必先利其器.器是什么?基础嘛,虽然说MVC框架中涉及到的知识很多很多也不是我一篇两篇能说完的,我能做的就是知道多少就跟大家分享多少,当然了随着时间的推移会完善这个系列. 1扩展方法 扩展方法是C# 3.0特性里的知识,它用在最多的地方是在Linq中,

MvcPager 概述 MvcPager 分页示例 — 标准Ajax分页 对SEO进行优化的ajax分页 (支持asp.net mvc)

该示例演示如何使用MvcPager最基本的Ajax分页模式. 使用AjaxHelper的Pager扩展方法来实现Ajax分页,使用Ajax分页模式时,必须至少指定MvcAjaxOptions的UpdateTargetId属性,该属性值即是分页后要通过Ajax来更新的 DOM 元素的 ID. Ajax.Pager()方法返回AjaxPager对象,您可以通过Ajax.Pager()方法的重载来传递PagerOptions和MvcAjaxOptions参数,也可以通过新的AjaxPager的Opti

linq to sql 扩展方法

老赵的博客:http://blog.zhaojie.me/2008/02/using-translate-method-and-modify-command-text-before-query-in-linq-to-sql.html http://www.csharpwin.com/dotnetspace/9639r2943_2.shtml 1.DataContext扩展方法 public static class DataContextExentions { /// <summary> //

Mvc 分页栏扩展方法

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

ASP.Net MVC开发基础学习笔记(2):HtmlHelper与扩展方法

一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归.所以抛弃之前的那种事件响应的模型,抛弃服务器端控件也理所当然. 但是,如果手写Html标签效率又比较低,可重用度比较低.这时,我们该怎样来提高效率呢?首先,经过上篇我们知道可以通过ViewData传递数据,于是我们可以写出以下的Html代码: 1 <input name="UserName&q

MVC @Html 扩展方法

在使用MVC开发过程中发现在View中需要一些自定义的方法,以前在webfrom开发是则是使用一个静态类,在里面编辑许多经常使用的方法来解决的.现在发现在MVC里面可以自定义扩展的HtmlHelper方法,具体操作如下:1.新建一个类  可以在项目中添加一个文件夹,命名为Helpers,在这个文件夹中可以添加各个类型的扩展类.下面我们添加一个文本处理扩展类,命名TextHelper.cs.注意:把该类的命名空间改为 namespace System.Web.Mvc,这样就可以在页面中使用该扩展方

study Mvc step by step (三)C#语言特性扩展方法

C#3.0之后推出了扩展方法.我们通常看到的方法都是和声明它的类相关联.扩展方法特性扩展这个边界,允许编写的方法和声明它的类之外的类关联. 要想知道可以如何使用这个特性,请看下面的代码.它包含类MyPerson.该类存贮了3个double类型的值,并含有一个构造函数和一个名称为sum的方法,该方法返回3个存储值得和. using System; using System.Collections.Generic; using System.Linq; using System.Text; usin

【ASP.NET MVC 学习笔记】- 14 HtmlHlper的扩展方法

本文参考:http://www.cnblogs.com/willick/p/3428413.html 1.在 MVC 中用于生成 Html 元素的辅助类是 System.Web.Mvc 命名空间下的 HtmlHelper,习惯上我们把 HtmlHelper 中的(扩展)方法叫 HtmlHelper Method,简称为Helper Method.它的作用是把生成 Html代码的任务交给 MVC,以便 MVC 能完成很多自动处理的工作.我们在 View 中使用的 Html.ActionLink.H

MVC为Html对象建立一个扩展方法,使用自己的控件就像使用TextBox一样方便

先看一下我想要的结果: 很容易它就是一个单选按钮组,当我后台为Html对象(HtmlHelper的一个实例,它被定义在System.Web.Mvc名称空间下的WebViewPage类,即它对于所有MVC页面都可用)建立好扩展方法后,使用以下语句就可以生成上面的效果: @Html.CreateGanderRadioButton() 扩展方法的定义: namespace Web.Helper { public static class ExtendHtml { public static MvcHt