MVC EF分页实现

 

1.Model中分页方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
 
//命名空间用系统命名空间
namespace System.Web.Mvc
{
    public static class MyHtmlHelperExt
    {
        // 传一个字符串过来,我给你封装成一个标签:<span>txt</span> 
        public static string GetLable(this HtmlHelper helper, string txt)
        {
            return string.Format("<span>{0}</span>", txt);
        }
 
 
        // 传一个字符串过来,我给你封装成一个标签:<span>txt</span> 
        public static MvcHtmlString GetMvcHtmlStringLable(this HtmlHelper helper, string txt)
        {
            string str = string.Format("<span>{0}</span>", txt);
            //将上的str 转成   MvcHtmlString
 
            // 创建一个实例:new
            //本类有个静态方法帮我们创建 Create
            //y有个工厂帮我们创建一个实例:HttpApplicationFactory
            //return new MvcHtmlString(str);
 
            //
            return MvcHtmlString.Create(str);
        }
 
        // 传一个字符串过来,我给你封装成一个标签:<span>txt</span> 
        public static HtmlString GetHtmlStringLable(this HtmlHelper helper, string txt)
        {
            string str = string.Format("<span class='laoma'>{0}</span>", txt);
            //将上的str 转成   MvcHtmlString
 
            // 创建一个实例:new
            //本类有个静态方法帮我们创建 Create
            //y有个工厂帮我们创建一个实例:HttpApplicationFactory
            //return new MvcHtmlString(str);
 
            //
            //return MvcHtmlString.Create(str);
 
            return new HtmlString(str);
        }
 
 
 
        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)
            {
                //if (currentPage != 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);
                }
                else
                {
                    // output.Append("<span class='pageLink'>上一页</span>");
                }
 
                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.Append(string.Format("[{0}]", currentPage));
                            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);
                }
                else
                {
                    //output.Append("<span class='pageLink'>下一页</span>");
                }
                output.Append(" ");
                if (currentPage != totalPages)
                {
                    output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>末页</a> ", redirectTo, totalPages, pageSize);
                }
                output.Append(" ");
            }
            output.AppendFormat("第{0}页 / 共{1}页", currentPage, totalPages);//这个统计加不加都行
 
            return new HtmlString(output.ToString());
        }
    }
}
 
 
2.控制器中写法
 
        Entities db = new Entities();
        public ActionResult Index()
        {
            var pageIndex = this.Request["pageIndex"] == null ? 1 : int.Parse(this.Request["pageIndex"]);
            var pageSize = this.Request["pageSize"] == null ? 10 : int.Parse(this.Request["pageSize"]);
            var total = db.yxs_orders.Count();
 
            ViewData["pageIndex"] = pageIndex;
            ViewData["pageSize"] = pageSize;
            ViewData["total"] = total;
 
            ViewData.Model = db.yxs_orders.OrderBy<yxs_ordersint>(u => u.Id)
                .Skip((pageIndex - 1) * pageSize)
                .Take(pageSize);
            return View();
        }
 
 
3.前台调用
<div class="paginator"><%:Html.ShowPageNavigate((int)ViewData["pageIndex"],(int)ViewData["pageSize"],(int)ViewData["total"]) %></div>
 
4.样式
.paginator
{
    font12px ArialHelveticasans-serif;
    padding10px 20px 10px 0;
    margin0px;
}
 
.paginator a
{
    bordersolid 1px #ccc;
    color#0063dc;
    cursorpointer;
    text-decorationnone;
}
 
.paginator a:visited
{
    padding1px 6px;
    bordersolid 1px #ddd;
    background#fff;
    text-decorationnone;
}
 
.paginator .cpb
{
    border1px solid #F50;
    font-weight700;
    color#F50;
    background-color#ffeee5;
}
 
.paginator a:hover
{
    bordersolid 1px #F50;
    color#f60;
    text-decorationnone;
}
 
.paginator a.paginator a:visited.paginator .cpb.paginator a:hover
{
    floatleft;
    height16px;
    line-height16px;
    min-width10px;
    _width10px;
    margin-right5px;
    text-aligncenter;
    white-spacenowrap;
    font-size12px;
    font-familyArial,SimSun;
    padding0 3px;
}
posted @ 2013-07-02 14:39  父辈の旗帜  阅读(557)  评论(0编辑  收藏  举报