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);
        }
    }
}

 

posted @ 2014-03-25 17:51  幸运的程序员  阅读(340)  评论(0编辑  收藏  举报