mvc3分页封装

1.先自定义一个类为PagingInfo

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace eBuul.ChinaJoy.BLL.Models
{
    public class PagingInfo
    {
        /// <summary>
        /// 总条数
        /// </summary>
        public int TotalItems { get; set; }
        /// <summary>
        /// 每页条数
        /// </summary>
        public int ItemsPerPage { get; set; }
        /// <summary>
        /// 当前页数
        /// </summary>
        public int CurrentPage { get; set; }
        /// <summary>
        /// 总页数
        /// </summary>
        public int TotalPages
        {
            get
            {
                if (ItemsPerPage!=0)
                {
                    return (int)Math.Ceiling((decimal)TotalItems / ItemsPerPage); 
                }
                return 0;
               
              
            }
        }
    }
}

2.在Action中写入以下代码:

PagingInfo pagingInfo = new PagingInfo() { CurrentPage = pageIndex, ItemsPerPage = pageSize, TotalItems = total };

ViewBag.PagingInfo = pagingInfo;

3.在view视图中调用

  <div class="pages">
            @Html.PageLinkes("FineGame", "Index", (eBuul.ChinaJoy.BLL.Models.PagingInfo)ViewBag.PagingInfo, new string[] { "Keyword" })
        </div>

4.Html扩展方法实现

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Text;
using eBuul.ChinaJoy.BLL.Models;


namespace System.Web.Mvc.Html
{
    public static class PagingHelpers
    {
        public static MvcHtmlString PageLinkes(this HtmlHelper html, string controller, string ActionName, PagingInfo pagingInfo, string[] paramArray)
        {
            HttpContext contenxt = HttpContext.Current;
            if (pagingInfo.TotalItems==0)
            {
                return MvcHtmlString.Create("");
            }
            //设置分页显示的区间值
            int IsNextPage = 1;
            int currentPage = (pagingInfo.CurrentPage - 1) / 5;
            int start = 1, end = 5;
            if (currentPage >= 1)
            {
                start = (currentPage * 5) + 1;
                end = (currentPage + 1) * 5;
            }
            StringBuilder result = new StringBuilder();
            string tmp = "";
            if (paramArray != null && paramArray.Length > 0)
            {
                for (int n = 0; n < paramArray.Length; n++)
                {
                    if (contenxt.Request.Params.AllKeys.Contains(paramArray[n]))
                        tmp += "&" + paramArray[n] + "=" + contenxt.Request.Params[paramArray[n]];
                }
            }

            //生成中间的分页数目
            int i = 0;
            for (i = start; i <= end; i++)
            {
                if (i <= pagingInfo.TotalPages)
                {
                    TagBuilder litag = new TagBuilder("li");
                    TagBuilder tag = new TagBuilder("a");
                    if (tmp != "")
                        tag.MergeAttribute("href", string.Format("/{0}/{1}?pageNo={2}{3}", controller, ActionName, i, tmp));
                    else
                        tag.MergeAttribute("href", string.Format("/{0}/{1}?pageNo={2}", controller, ActionName, i));
                    tag.InnerHtml = i.ToString();
                    if (i == pagingInfo.CurrentPage)
                        litag.AddCssClass("li_bg");
                    litag.InnerHtml = tag.ToString();
                    result.Append(litag.ToString());
                    IsNextPage++;
                }
                else
                    break;
            }
            //设置分页显示的下一区间值的起始位置(即页面中的"..."按钮)
            if (pagingInfo.TotalPages > 5 && (i - 1) != pagingInfo.TotalPages)
            {
                TagBuilder litagDot = new TagBuilder("li");
                TagBuilder tagDot = new TagBuilder("a");
                if (tmp != "")
                    tagDot.MergeAttribute("href", string.Format("/{0}/{1}?pageNo={2}{3}", controller, ActionName, end + 1, tmp));
                else
                    tagDot.MergeAttribute("href", string.Format("/{0}/{1}?pageNo={2}", controller, ActionName, end + 1));
                tagDot.InnerHtml = "...";
                litagDot.InnerHtml = tagDot.ToString();
                result.Append(litagDot.ToString());
            }
            //设置分页显示的上一区间值的起始位置(即页面中的"..."按钮)
            if (currentPage >= 1)
            {
                TagBuilder litagDot = new TagBuilder("li");
                TagBuilder tagDot = new TagBuilder("a");
                if (tmp != "")
                    tagDot.MergeAttribute("href", string.Format("/{0}/{1}?pageNo={2}{3}", controller, ActionName, start - 1, tmp));
                else
                    tagDot.MergeAttribute("href", string.Format("/{0}/{1}?pageNo={2}", controller, ActionName, start - 1));
                tagDot.InnerHtml = "...";
                litagDot.InnerHtml = tagDot.ToString();
                result.Insert(0, litagDot.ToString());
            }

            //上一页
            if (pagingInfo.TotalPages > 1)
            {
                TagBuilder litagPre = new TagBuilder("li");
                TagBuilder tagPre = new TagBuilder("a");
                //TagBuilder tagImgPre = new TagBuilder("img");
                //tagImgPre.MergeAttribute("src", "/Content/imghome/left02.png");

                if (pagingInfo.CurrentPage == 1)
                    tagPre.MergeAttribute("href", "#");
                else
                {
                    if (tmp != "")
                        tagPre.MergeAttribute("href", string.Format("/{0}/{1}?pageNo={2}{3}", controller, ActionName, pagingInfo.CurrentPage - 1, tmp));
                    else
                        tagPre.MergeAttribute("href", string.Format("/{0}/{1}?pageNo={2}", controller, ActionName, pagingInfo.CurrentPage - 1));
                }
                //tagPre.InnerHtml = tagImgPre.ToString();
             
                    tagPre.InnerHtml = "上一页";
                litagPre.InnerHtml = tagPre.ToString();
                result.Insert(0, litagPre);
            }
            //下一页
            if (pagingInfo.TotalPages > 1)
            {
                TagBuilder litagNext = new TagBuilder("li");
                TagBuilder tagNext = new TagBuilder("a");
                //TagBuilder tagImgNext = new TagBuilder("img");
                //tagImgNext.MergeAttribute("src", "/Content/imghome/right02.png");
                if (pagingInfo.CurrentPage == pagingInfo.TotalPages)
                    tagNext.MergeAttribute("href", "#");
                else
                {
                    if (tmp != "")
                        tagNext.MergeAttribute("href", string.Format("/{0}/{1}?pageNo={2}{3}", controller, ActionName, pagingInfo.CurrentPage + 1, tmp));
                    else
                        tagNext.MergeAttribute("href", string.Format("/{0}/{1}?pageNo={2}", controller, ActionName, pagingInfo.CurrentPage + 1));
                }
                //tagNext.InnerHtml = tagImgNext.ToString();
            
                
                    tagNext.InnerHtml = "下一页";
            
                litagNext.InnerHtml = tagNext.ToString();
                result.Append(litagNext.ToString());
            }
            //总页数
            TagBuilder litagTotal = new TagBuilder("li");
            TagBuilder spantag = new TagBuilder("span");
            litagTotal.AddCssClass("li_none");
            spantag.InnerHtml = pagingInfo.TotalItems.ToString();
            string paramUrl =  string.Format("/{0}/{1}{2}", controller, ActionName, string.IsNullOrWhiteSpace(tmp)?string.Empty:"?"+tmp.TrimStart('&'));
            string pageHtml = string.Format("共<span id=\"pageSum\">{0}</span>页&nbsp;&nbsp;{1}条记录&nbsp;到第<input type=\"text\" size=\"2\" id=\"jumpto\" name=\"jumpto\" class=\"inputpage\" title=\"指定页码\" value=\"{3}\">页<input type=\"button\" title=\"指定页码\" value=\"确定\" id=\"btnGO\" class=\"button_li\"><input type=\"hidden\" value=\"{2}\" id=\"hdnParamUrl\"", pagingInfo.TotalPages, spantag.ToString(), paramUrl, pagingInfo.TotalPages == pagingInfo.CurrentPage ? pagingInfo.CurrentPage : pagingInfo.CurrentPage+1);
           litagTotal.InnerHtml = pageHtml;
            result.Append(litagTotal.ToString());

            TagBuilder ultag = new TagBuilder("ul");
            ultag.InnerHtml = result.ToString();
            return MvcHtmlString.Create(ultag.ToString());
        }
    }
}

posted @ 2013-04-24 18:10  学亮  阅读(294)  评论(0编辑  收藏  举报