zoukankan      html  css  js  c++  java
  • MVC中的自定义控件——分页

    上一篇是个简单例子,这篇借分页写个升级版的例子。

    不想拼html代码,因为不好修改,那写一个PartialView.

    @model System.Web.Mvc.PagerModel
    @if (Model.PagerShow)
    {
        <div id="@Model.PagerId" class="pagination pagination-right">
            <ul>
                <li class="@((Model.CurTeam == 1)?"disabled":"")"><a href="?p=1"><i class="icon-fast-backward"></i></a></li>
                <li class="@((Model.CurTeam == 1)?"disabled":"")"><a href="?p=@Model.PreStep"><i class="icon-backward"></i></a></li>
                @foreach (var item in Model.PageList)
                {                   
                    <li class="@((item.PageNumber == Model.CurPage)?"active":"")"><a href="?p=@item.PageNumber" >@item.PageNumber</a></li>
                }
                <li class="@((Model.CurTeam == Model.TotalTeam)?"disabled":"")"><a href="?p=@Model.NextStep"><i class="icon-forward"></i></a></li>
                <li class="@((Model.CurTeam == Model.TotalTeam)?"disabled":"")"><a href="?p=@Model.TotalPage"><i class="icon-fast-forward"></i></a></li>
            </ul>
        </div> 
    } 

    然后写扩展方法,顺带PartialView的Model。用HtmlHelper的Partial生成HtmlString

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Mvc.Html;
    using System.Web.Routing;
    using System.Text;
    
    namespace System.Web.Mvc
    {
        /// <summary>
        /// 分页控件属性
        /// </summary>
        public class PagerModel
        {
            /// <summary>
            /// 页码控件ID
            /// </summary>
            public string PagerId { get; set; }
            /// <summary>
            /// 页码空控件开关
            /// </summary>
            public bool PagerShow { get; set; }
            /// <summary>
            /// 当前分组,从1开始
            /// </summary>
            public int CurTeam { get; set; }
            /// <summary>
            /// 前一跳页码
            /// </summary>
            public int PreStep { get; set; }
            /// <summary>
            /// 当前页码,从1开始
            /// </summary>
            public int CurPage { get; set; }
            /// <summary>
            /// 后一跳页码
            /// </summary>
            public int NextStep { get; set; }
            /// <summary>
            /// 总页数
            /// </summary>
            public int TotalPage { get; set; }
            /// <summary>
            /// 页码分组数
            /// </summary>
            public int TotalTeam { get; set; }
            /// <summary>
            /// 当前页码组
            /// </summary>
            public List<PageModel> PageList { get; set; }       
    
        }
    
        /// <summary>
        /// 页码属性
        /// </summary>
        public class PageModel
        {
            /// <summary>
            /// 页码
            /// </summary>
            public int PageNumber { get; set; }
        }
    
        public static class PageHelper
        {
            public static MvcHtmlString Pager(this HtmlHelper helper,
                string pagerId, //分页控件Id
                int curPage, //当前页
                int pagerSize, //页码个数
                int totalSize, //总记录数
                int pageSize, //每页记录数
                string view //分页模板
            )
            {
                if (curPage<1)
                {
                    curPage = 1;
                }
                if (totalSize<1)
                {
                    totalSize = 1;
                }
                PagerModel pager = new PagerModel();
                pager.PagerId = pagerId;
                pager.CurPage = curPage;
                pager.TotalPage = (totalSize % pageSize == 0) ? (totalSize / pageSize) : (totalSize / pageSize) + 1;
                if (curPage > pager.TotalPage)
                {
                    curPage = pager.TotalPage;
                }           
                int curTeam = (curPage % pagerSize == 0) ? (curPage / pagerSize) : (curPage / pagerSize) + 1;    //页码当前分组  
                pager.TotalTeam = (pager.TotalPage % pagerSize == 0) ? (pager.TotalPage / pagerSize) : (pager.TotalPage / pagerSize) + 1;    //页码当前分组  
                pager.CurTeam = curTeam;
                int leftPageNum = (curTeam - 1)* pagerSize + 1;//左边界
                pager.PreStep = (leftPageNum - pagerSize) > 1 ? (leftPageNum - pagerSize) : 1;
                pager.NextStep = (leftPageNum + pagerSize) <= pager.TotalPage ? (leftPageNum + pagerSize) : leftPageNum;
                if (pager.TotalPage > 1)
                {
                    pager.PagerShow = true;//显示分页
                    List<PageModel> pageList = new List<PageModel>();
                    int step = (leftPageNum + pagerSize) < pager.TotalPage ? pagerSize : pager.TotalPage % pageSize ;
                    var sourceList = Enumerable.Range(leftPageNum, step);
                    pageList.AddRange(sourceList.Select(p => new PageModel{PageNumber = p}));
                    pager.PageList = pageList;
                }
                else
                {
                    pager.PagerShow = false;//页数少于一页,则不显示分页
                }
                return helper.Partial(view, pager);
            }
        }
    }
  • 相关阅读:
    C#委托 delegate
    认识反射
    【译】修改大XML文件的有效方法
    学习javascript并解读JQuery
    ASP.Net用户验证的实现
    渴望
    C++中常见的一些小问题总结(一)
    struts2:关于EL能够获得action的属性
    排序算法总结
    WebService开发实例
  • 原文地址:https://www.cnblogs.com/LLLLoveLLLLife/p/3623727.html
Copyright © 2011-2022 走看看