Ajax1壹 、ASP.NET MVC入门到驾驭——AspnetMVC分页

本种类目录:ASP.NET
MVC4入门到精晓体系目录汇总

说起分页,这大概是大家Web开发中遇见得最多的气象,没有之一,可即使如此,要做出相比优雅的分页还是需求技术的。那里本人先说一种ASP.NET
MVC中很普遍的一种分页的兑现格局,很low,但是过多小卖部的花色正是那般用的,笔者后天卖家的档次便是也是,有时候面对集团项目屎一样的用户体验和混乱的代码,真是恨不可能重写,不过往往又眼睁睁的望着它一连在运作,继续风险着客户,又不能够,有时候甚至为了赶进程,还被迫性干扰式的复制原有的代码。

方法一:自定义Html扩充方法

效益如下:

Ajax 1

① 、新建接口IPageOfList

    public interface IPageOfList
    {
        long CurrentStart { get; }
        int PageIndex { get; set; }
        int PageSize { get; set; }
        int PageTotal { get; }
        long RecordTotal { get; set; }
    }

二 、新建三个Html扩张方法

     public static MvcHtmlString UlPaging(this HtmlHelper helper, IPageOfList list)
        {
            StringBuilder sb = new StringBuilder();

            if (list == null)
            {
                return new MvcHtmlString(sb.ToString());
            }

            sb.AppendLine("<div class=\"fenye\">" + string.Format("共 {0} 条 记录,每页 {1} 条 &nbsp;", list.RecordTotal, list.PageSize));

            //sb.AppendLine(" <ul class=\"pagination\">");
            System.Web.Routing.RouteValueDictionary route = new System.Web.Routing.RouteValueDictionary();
            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(" <li class=\"prev " + (list.PageIndex == 0 ? "disabled" : "") + "\">" + helper.ActionLink("← 上一页", route["action"].ToString(), route).ToHtmlString() + "</li>");
                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("&lt;", "<").Replace("&gt;", ">"));
                //sb.AppendLine(" <li>" + helper.ActionLink("1", route["action"].ToString(), route).ToHtmlString() + "</li>");
                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("<li" + (i == list.PageIndex + 1 ? " class=\"active\"" : "") + ">" + helper.ActionLink(i.ToString(), route["action"].ToString(), route).ToHtmlString() + "</li>");
                sb.AppendLine(helper.ActionLink(@"<b>" + i.ToString() + @"</b>", route["action"].ToString(), route).ToHtmlString().Replace("&lt;", "<").Replace("&gt;", ">"));
            }

            sb.AppendLine(@"<a class='active' href='#'><b>" + (list.PageIndex + 1) + @"</b></a>");
            for (var 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("&lt;", "<").Replace("&gt;", ">"));
                //sb.AppendLine("<li" + (i == list.PageIndex + 1 ? " class=\"active\"" : "") + ">" + helper.ActionLink(i.ToString(), route["action"].ToString(), route).ToHtmlString() + "</li>");
            }

            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("&lt;", "<").Replace("&gt;", ">"));
                //sb.AppendLine(" <li>" + helper.ActionLink(list.PageTotal.ToString(), route["action"].ToString(), route).ToHtmlString() + "</li>");
            }
            if (list.PageIndex < list.PageTotal - 1)
            {
                route["pageIndex"] = list.PageIndex + 1;
                sb.AppendLine(helper.ActionLink("下一页", route["action"].ToString(), route).ToHtmlString());
                //sb.AppendLine("<li class=\"next\">" + helper.ActionLink("下一页 →", route["action"].ToString(), route).ToHtmlString() + "</li>");, new { @class = "nextpage" }
            }
            else
            {
                sb.AppendLine("<a class=\"nextpage\" href=\"javascript:void(0);\">下一页</a>");
                //sb.AppendLine("<li class=\"nextpage disabled\"><a href=\"javascript:void(0);\">下一页 →</a></li>");
            }
            sb.AppendLine("</div>");
            return new MvcHtmlString(sb.ToString());
        }

三 、界面调用

@model ProjectBase.Utils.Entities.PageOfList<Uuch.MSD.Core.Orders.Order>

@Uuch.MSD.App_Start.WebHtmlHelper.UlPaging(this.Html, Model)

怎么说那代码屎一样的?

界面看起来尚可对啊,其实您看这么些“…”点击了是没反应的,就算到了最终一页,那些“下一页”按钮也照旧呈现的,还有,没有跳转到钦定页的功力,当然,那个都得以协调再扩充,但是本身就纳闷了,有必不可少每1个零部件都友好再也开发吗?我们做软件开发的,其实就像工厂里做组装的,把现成的零部件根据图纸拼起来就可以了,完全不须求每二个零件重新做。

壹 、用户体验极差,每一回点击下一页,整个界面刷新。

② 、扩张性极差,种种硬编码

叁 、成效很弱

方式二:第三方UI组件

用过第壹方UI控件的都知晓,我们作为Web后台开发人员,能够省去无独有偶调全部制和用原生js或许jquery达成部分效果的年华,也基本上用不着去考虑各样蛋疼的包容性难点,因为这个题材,UI组件都替大家贯彻了。诸如ExtJs,easyUI,MiniUI,bootstrapts等等。

世家能够看下作者前面写的ASP.NET
MVC搭建项目后台UI框架—六 、客户管理(添加、修改、查询、分页)

在此地笔者利用的是根据jquery的dataTables来落到实处的。

Ajax 2

和艺术一相比的优点在于

一 、用户体验好,都是Ajax局地刷新的,而且能够帮助二回性读取全数,然后在内部存款和储蓄器中分页(对于数据量非常小的表而言,那样的分页效用很高),其次协助服务器分页。

贰 、扩张性好,界面包车型客车体制和出示都是能够通过品质来铺排的,基本上不设有所谓的硬编码。

③ 、功能强大

Ajax,世家有如何好的想法,说出去我们一块探索下啊!

在在此此前,没有运用O福特ExplorerM框架,使用ADO.Net的时期,大家日常分页都以写分页存款和储蓄进度来落到实处分页的,可是随着O宝马X5M框架的风靡,分页变得特别简单。

望着那多少个屎一样的花色,无论点个吗东西都把全路界面刷新,而本身又不得不时刻用,弄得眼睛都被闪瞎了,不过又力不从心,真心很忧伤,都说前人挖坑后人填,可是多少时候,前人坑挖得前面包车型大巴人没时间填。不由得想起多少个客户说的话:“集团系统有点烂,体验比较差,快递多少慢,客服相比拽,售后有点差,运费相比高”。

相关文章