分页

public static string Pager(this HtmlHelper helper, string routeName, string actionName, string controllerName, IDictionary<string, object> values, string pageParamName, bool appendQueryString, int pageCount, int noOfPageToShow, int noOfPageInEdge, int currentPage)
        {
            Func<string, int, string> getPageLink
                 = (text, page) =>
                {
                    RouteValueDictionary newValues = new RouteValueDictionary();

                    foreach (KeyValuePair<string, object> pair in values)
                    {
                        if ((string.Compare(pair.Key, "controller", StringComparison.OrdinalIgnoreCase) != 0) &&
                            (string.Compare(pair.Key, "action", StringComparison.OrdinalIgnoreCase) != 0))
                        {
                            newValues[pair.Key] = pair.Value;
                        }
                    }

                    if (page > 0)
                    {
                        newValues[pageParamName] = page;
                    }

                    if (appendQueryString)
                    {
                        NameValueCollection queryString = helper.ViewContext.HttpContext.Request.QueryString;

                        foreach (string key in queryString)
                        {
                            if (key != null)
                            {
                                if (!newValues.ContainsKey(key))
                                {
                                    if (!string.IsNullOrEmpty(queryString[key]))
                                    {
                                        newValues[key] = queryString[key];
                                    }
                                }
                            }
                        }
                    }

                    string link;

                    if (!string.IsNullOrEmpty(routeName))
                    {
                        link = helper.RouteLink(text, routeName, newValues);
                    }
                    else
                    {
                        actionName = actionName ?? values["action"].ToString();
                        controllerName = controllerName ?? values["controller"].ToString();

                        link = helper.ActionLink(text, actionName, controllerName, newValues, null);
                    }

                    return string.Concat(" ", link);
                };

            StringBuilder pagerHtml = new StringBuilder();

            if (pageCount > 1)
            {
                pagerHtml.Append("<div class=/"Pager/">");

                double half = Math.Ceiling(Convert.ToDouble(Convert.ToDouble(noOfPageToShow) / 2));

                int start = Convert.ToInt32((currentPage > half) ? Math.Max(Math.Min((currentPage - half), (pageCount - noOfPageToShow)), 0) : 0);
                int end = Convert.ToInt32((currentPage > half) ? Math.Min(currentPage + half, pageCount) : Math.Min(noOfPageToShow, pageCount));

                if (currentPage > 1)
                {
                    pagerHtml.Append(getPageLink("上一页", currentPage - 1));
                }
                else
                {
                    pagerHtml.Append(" <span class=/"disabled/">上一页</span>");
                }

                if (start > 0)
                {
                    int startingEnd = Math.Min(noOfPageInEdge, start);

                    for (int i = 0; i < startingEnd; i++)
                    {
                        int pageNo = (i + 1);

                        pagerHtml.Append(getPageLink(pageNo.ToString(), pageNo));
                    }

                    if (noOfPageInEdge < start)
                    {
                        pagerHtml.Append(" ...");
                    }
                }

                for (int i = start; i < end; i++)
                {
                    int pageNo = (i + 1);

                    if (pageNo == currentPage)
                    {
                        pagerHtml.AppendFormat(" <span class=/"Current/">[{0}]</span>", pageNo);
                    }
                    else
                    {
                        pagerHtml.Append(getPageLink("[" + pageNo.ToString() + "]", pageNo));
                    }
                }

                if (end < pageCount)
                {
                    if ((pageCount - noOfPageInEdge) > end)
                    {
                        pagerHtml.Append(" ...");
                    }

                    int endingStart = Math.Max(pageCount - noOfPageInEdge, end);

                    for (int i = endingStart; i < pageCount; i++)
                    {
                        int pageNo = (i + 1);
                        pagerHtml.Append(getPageLink(pageNo.ToString(), pageNo));
                    }
                }

                if (currentPage < pageCount)
                {
                    pagerHtml.Append(getPageLink("下一页", currentPage + 1));
                }
                else
                {
                    pagerHtml.Append(" <span class=/"disabled/">下一页</span>");
                }

                pagerHtml.Append("</div>");
            }

            return pagerHtml.ToString();
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值