• ASP.NET MVC 分页之HtmlHelper


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Security.Cryptography.X509Certificates;
    using System.Web;
    
    namespace MvcAppPager.Models
    {
        public interface IPageOfList
        {
            long CurrentStart { get; }
            int PageIndex { get; set; }
            int PageSize { get; set; }
            int PageTotal { get; }
            long RecordTotal { get; set; }
        }
    
        public interface IPageOfList<T> : IPageOfList, IList<T>
        {
            
        }
        public class PageOfList<T>:List<T>,IList<T>,IPageOfList,IPageOfList<T>
        {
            public PageOfList(IEnumerable<T> items, int pageIndex, int pageSize, long recordTotal)
            {
                if (items!=null)
                    AddRange(items);
                PageIndex = pageIndex;
                PageSize = pageSize;
                RecordTotal = recordTotal;
            }
    
            public PageOfList(int pageSize)
            {
                if (pageSize <= 0)
                {
                    throw new ArgumentException("页面数据量必须大于0", "页面数据量");
                }
            }
            public int PageIndex { get; set; }
            public int PageSize { get; set; }
    
            public int PageTotal
            {
                get
                {
                    //RecordTotal / PageSize  获取能够被布满的页面数,(RecordTotal % PageSize > 0 ? 1 : 0)判断是否有未布满的页面。
                    return (int)RecordTotal / PageSize + (RecordTotal % PageSize > 0 ? 1 : 0);
                }
            }
    
            public long RecordTotal { get; set; }
            /// <summary>
            /// 当前页面的记录开始位置
            /// </summary>
            public long CurrentStart
            {
                get { return PageIndex * PageSize + 1; }
            }
            /// <summary>
            /// 当前页面的结束位置
            /// </summary>
            public long CurrentEnd
            {
                get { return (PageIndex + 1) * PageSize > RecordTotal ? RecordTotal : (PageIndex + 1) * PageSize; }
            }
        }
    }
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace MvcAppPager.Models
    {
        public class Order
        {
            public int ID { get; set; }
            public string OrderNo { get; set; }
            public decimal WayFee { get; set; }
            public string EMS { get; set; }
        }
    }
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using MvcAppPager.Models;
    
    namespace MvcAppPager.Controllers
    {
        public class HomeController : Controller
        {
            List<Order> list=new List<Order>
            {
                new Order{ID=1,OrderNo="2016050501",WayFee = 20,EMS = "C01111"},
                new Order{ID=2,OrderNo="2016050502",WayFee = 20,EMS = "C01112"},
                new Order{ID=3,OrderNo="2016050503",WayFee = 20,EMS = "C01113"},
                new Order{ID=4,OrderNo="2016050504",WayFee = 20,EMS = "C01114"},
                new Order{ID=5,OrderNo="2016050505",WayFee = 20,EMS = "C01115"},
                new Order{ID=6,OrderNo="2016050506",WayFee = 20,EMS = "C01116"},
            };
    
            private const int PageSize = 2;
    
            private int counts;
    
            //
            // GET: /Home/
            public ActionResult Index(int pageIndex=0)
            {
                counts = list.Count;
                list = list.Skip(PageSize * pageIndex).Take(PageSize).ToList();
                PageOfList<Order> _ordersList=new PageOfList<Order>(list,pageIndex,PageSize,counts);
                return View(_ordersList);
            }
    
        }
    }
    
    using System.Text;
    using System.Web.Mvc;
    using System.Web.Mvc.Html;
    
    namespace MvcAppPager.Models
    {
        public static class ExtHelper
        {
            public static MvcHtmlString UIPaging(this HtmlHelper helper,IPageOfList list)
            {
                StringBuilder sb=new StringBuilder();
    
                if (list == null)
                {
                    return new MvcHtmlString(sb.ToString());
                }
                //显示记录条数和每页有多少条记录
                sb.AppendLine("<div class="fenye">"+string.Format("<span>共{0}条记录,每页{1}条  </span>",list.RecordTotal,list.PageSize));
                
                System.Web.Routing.RouteValueDictionary route = new System.Web.Routing.RouteValueDictionary();
                //获取路由字典中的控制器【controller】和【action】
                foreach (var key in helper.ViewContext.RouteData.Values.Keys)
                {
                    route[key] = helper.ViewContext.RouteData.Values[key];
                }
                //获取请求信息
                foreach (string key in helper.ViewContext.RequestContext.HttpContext.Request.QueryString)
                {
                    route[key] = helper.ViewContext.RequestContext.HttpContext.Request.QueryString[key];
                }
    
                if (list.PageIndex <= 0)
                {
                    sb.AppendLine("<a class="backpage" href="javascript:void(0);">上一页</a>");
                }
                else
                {
                    route["pageIndex"] = list.PageIndex - 1;
    
                    sb.AppendLine(helper.ActionLink("上一页",route["action"].ToString(),route).ToHtmlString());
                }
    
                if (list.PageIndex>3)
                {
                    route["pageIndex"] = 0;
                    sb.AppendLine(helper.ActionLink(@"<b>1</b>", route["action"].ToString(), route).ToHtmlString().Replace("<", "<").Replace(">", ">"));
    
                    if (list.PageIndex>=5)
                    {
                        sb.AppendLine("<a href='#'>..</a>");
                    }
                }
    
    
                for (int i = list.PageIndex-2; i <=list.PageIndex ; i++)
                {
                    if (i < 1)
                       continue;
    
                    route["pageIndex"] = i - 1;
                    sb.AppendLine(helper.ActionLink(@"<b>" + i.ToString() + @"</b>", route["action"].ToString(), route).ToHtmlString().Replace("<", "<").Replace(">", ">"));
                }
    
                sb.AppendLine(@"<a class='active' href='#'><b>" + (list.PageIndex + 1) + @"</b></a>");
    
                for (int i = list.PageIndex + 2; i < list.PageIndex + 4; i++)
                {
                    if (i>list.PageTotal)
                        continue;
                    route["pageIndex"] = i - 1;
                    sb.AppendLine(helper.ActionLink(@"<b>" + i.ToString() + @"</b>", route["action"].ToString(), route).ToHtmlString().Replace("<", "<").Replace(">", ">"));
                }
    
                if (list.PageIndex<list.PageTotal-4)
                {
                    if (list.PageIndex<=list.PageTotal-6)
                    {
                        sb.AppendLine("<a href='#'>..</a>");
                    }
                    route["pageIndex"] = list.PageTotal - 1;
                    sb.AppendLine(helper.ActionLink(@"<b>" + list.PageTotal.ToString() + @"</b>", route["action"].ToString(), route).ToHtmlString().Replace("<", "<").Replace(">", ">"));
                }
    
                if (list.PageIndex<list.PageTotal-1)
                {
                    route["pageIndex"] = list.PageIndex + 1;
                    sb.AppendLine(helper.ActionLink("下一页", route["action"].ToString(), route).ToHtmlString());
                }
                else
                {
                    sb.AppendLine("<a class="nextpage" href="javascript:void(0);">下一页</a>");
                }
    
                sb.AppendLine("</div>");
    
                return new MvcHtmlString(sb.ToString());
            }
        }
    }
    
    @model MvcAppPager.Models.PageOfList<MvcAppPager.Models.Order>
    @{
        Layout = null;
        ViewBag.Title = "Index";
    }
    
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Index</title>
        @Styles.Render("~/Content/page.css")
    </head>
    <body>
        <div id="body" style=" 400px;float: left">
            @using (Html.BeginForm("Index","Home",FormMethod.Get))
            {
                <table>
                    <tr>
                        <th>ID</th>
                        <th>订单号</th>
                        <th>运单号</th>
                        <th>运费</th>
                    </tr>
                    @if (Model != null && Model.Count > 0)
                    {
                        foreach (var item in Model.ToList())
                        {
                            <tr>
                                <td>@item.ID</td>
                                <td>@item.OrderNo</td>
                                <td>@item.EMS</td>
                                <td>@item.WayFee</td>
                            </tr>
                        }
                    }
                </table>   
                @MvcAppPager.Models.ExtHelper.UIPaging(this.Html,Model)
            }
        </div>
    </body>
    </html>
    
    .fenye {
         float: right;
    }
    
    .fenye a,.fenye span,.fenye select {
        display: block;
        float: left;
        margin: 0 2px;
    }
    
    .fenye a {
        background: #fff;
        border: 1px solid #d6d6d6;
        color: #6f6f6f;
        height: 22px;
        line-height: 22px;
        margin: 0 2px;
        padding: 0 0 0 8px;
        position: relative;
    }
    
    .fenye a.nextpage:hover {
        background: #fff;
        border: 1px solid #ba191b;
        color: #000;
    }
    
    .fenye a.nextpage {
        height: 22px;
        margin: 0 0 0 2px;
        padding: 0px 5px;
    }
    
    .fenye a.backpage {
        background: #fff;
        border: 1px solid #d6d6d6;
        height: 22px;
        margin: 0 2px 0 0;
        padding: 0px 5px;
    }
    
    .fenye a.backpage:hover {
        background: url("images/pagebut.gif") no-repeat scroll left top rgba(0, 0, 0, 0);
        color: #000;
    }
    
    .fenye a:hover,.fenye a.active {
        background: #c32325;
        border: 1px solid #ba191b;
        color: #ffffff;
        text-decoration: none;
    }
    
    .fenye a.shenlue {
        background: none repeat scroll 0 0 rgba(0, 0, 0, 0);
        margin: 0 5px;
        padding: 0;
        border: none;
    }
    
    .fenye a.shenlue:hover {
        color: #333333;
    }
    
    .fenye a b {
        display: block;
        font-size: 12px; 
        font-weight: normal;
        height: 22px;
        line-height: 22px;
        margin-right: 0;
        padding: 0 8px 0 0;
        position: relative;
    }
  • 相关阅读:
    翻转单词顺序序列
    左旋转字符串
    查找第一个只出现一次的字符
    C语言函数与程序结构
    C语言实现快速排序法(分治法)
    C语言binsearch,shellsort,insertsort
    c语言的类型、运算符与表达式
    进程和线程
    CMS和G1
    Python IO编程
  • 原文地址:https://www.cnblogs.com/bjxingch/p/8192931.html
Copyright © 2020-2023  润新知