参考效果:
参考代码:
/// <summary> /// 分页 /// </summary> /// <param name="helper">helper 对象</param> /// <param name="currentPageIndex">当前页</param> /// <param name="pageSize">显示条数</param> /// <param name="recordCount">总条数</param> /// <param name="pageCount">总页数</param> /// <returns>html代码</returns> public static MvcHtmlString Pager(this HtmlHelper helper, long currentPageIndex, long pageSize, long recordCount, long pageCount) { if (recordCount == 0) { return null; } int btnCount = 7; TagBuilder builder = new TagBuilder("div"); builder.AddCssClass("page"); builder.InnerHtml = GetNormalPage(currentPageIndex, pageSize, recordCount, pageCount, btnCount); return MvcHtmlString.Create(builder.ToString(TagRenderMode.Normal)); } /// <summary> /// 获取普通分页 /// </summary> private static string GetNormalPage(long currentPageIndex, long pageSize, long recordCount, long pageCount, int btnCount) { StringBuilder url = new StringBuilder(); url.Append(HttpContext.Current.Request.Url.AbsolutePath + "?page={0}"); NameValueCollection collection = HttpContext.Current.Request.QueryString; string[] keys = collection.AllKeys; for (int i = 0; i < keys.Length; i++) { if (keys[i].ToLower() != "page") url.AppendFormat("&{0}={1}", HttpUtility.UrlEncode(keys[i]), HttpUtility.UrlEncode(collection[keys[i]])); } StringBuilder sb = new StringBuilder(); sb.AppendFormat("总共有<i class='nochange'>{0}</i>条记录</span>", recordCount); if (currentPageIndex > 1) { string url1 = string.Format(url.ToString(), currentPageIndex - 1); sb.AppendFormat(" <a href="{0}"><span> <<</span></a>", url1); } else sb.Append(" <span><<</span>"); sb.Append(GetNumericPage(currentPageIndex, pageSize, recordCount, pageCount, url.ToString(), btnCount)); if (currentPageIndex < pageCount) { string url1 = string.Format(url.ToString(), currentPageIndex + 1); sb.AppendFormat(" <a href="{0}"><span>>> </span></a>", url1); } else sb.Append(" <span>>></span>"); return sb.ToString(); } /// <summary> /// 获取数字分页 /// </summary> /// <param name="currentPageIndex">当前页码</param> /// <param name="pageSize">每页显示条数</param> /// <param name="recordCount">数据总条数</param> /// <param name="pageCount">总页数</param> /// <param name="url">地址</param> /// <param name="btnCount">没有按钮显示个数</param> /// <returns></returns> private static string GetNumericPage(long currentPageIndex, long pageSize, long recordCount, long pageCount, string url, int btnCount) { int start = btnCount / 2; int end = btnCount - 1; long beginNum = currentPageIndex - start > pageCount - end ? pageCount - end : currentPageIndex - start; if (beginNum < 1) { beginNum = 1; } long endNum = beginNum + btnCount > pageCount ? pageCount : beginNum + end; StringBuilder sb = new StringBuilder(); for (long i = beginNum; i <= endNum; i++) { if (i == currentPageIndex) sb.AppendFormat(" <span class="checked">{0}</span>", currentPageIndex); else { string url1 = PublicVars.GetNewURL(string.Format(url.ToString(), i)); sb.AppendFormat(" <a href="{0}"><span>{1}</span></a>", url1, i); } } return sb.ToString(); } #endregion