mvc 自定義分頁控件

  /// <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

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章