示例#1
0
        /// <summary>
        /// 生成最终的分页Html代码
        /// </summary>
        /// <returns></returns>
        internal MvcHtmlString RenderPager()
        {
            //return null if total page count less than or equal to 1
            if (_totalPageCount <= 1 && _pagerOptions.AutoHide)
            {
                return(MvcHtmlString.Create(CopyrightText));
            }
            //Display error message if pageIndex out of range
            if ((_pageIndex > _totalPageCount && _totalPageCount > 0) || _pageIndex < 1)
            {
                return
                    (MvcHtmlString.Create(string.Format("{0}<div style=\"color:red;font-weight:bold\">{1}</div>{0}",
                                                        CopyrightText, _pagerOptions.PageIndexOutOfRangeErrorMessage)));
            }

            var pagerItems = new List <PagerItem>();

            //First page
            if (_pagerOptions.ShowFirstLast)
            {
                AddFirst(pagerItems);
            }
            // Prev page
            if (_pagerOptions.ShowPrevNext)
            {
                AddPrevious(pagerItems);
            }
            if (_pagerOptions.ShowNumericPagerItems)
            {
                if (_pagerOptions.AlwaysShowFirstLastPageNumber && _startPageIndex > 1)
                {
                    pagerItems.Add(new PagerItem("1", 1, false, PagerItemType.NumericPage));
                }
                // more page before numeric page buttons
                if (_pagerOptions.ShowMorePagerItems && ((!_pagerOptions.AlwaysShowFirstLastPageNumber && _startPageIndex > 1) || (_pagerOptions.AlwaysShowFirstLastPageNumber && _startPageIndex > 2)))
                {
                    AddMoreBefore(pagerItems);
                }
                // numeric page
                AddPageNumbers(pagerItems);
                // more page after numeric page buttons
                if (_pagerOptions.ShowMorePagerItems && ((!_pagerOptions.AlwaysShowFirstLastPageNumber && _endPageIndex < _totalPageCount) || (_pagerOptions.AlwaysShowFirstLastPageNumber && _totalPageCount > _endPageIndex + 1)))
                {
                    AddMoreAfter(pagerItems);
                }
                if (_pagerOptions.AlwaysShowFirstLastPageNumber && _endPageIndex < _totalPageCount)
                {
                    pagerItems.Add(new PagerItem(_totalPageCount.ToString(CultureInfo.InvariantCulture), _totalPageCount, false,
                                                 PagerItemType.NumericPage));
                }
            }
            // Next page
            if (_pagerOptions.ShowPrevNext)
            {
                AddNext(pagerItems);
            }
            //Last page
            if (_pagerOptions.ShowFirstLast)
            {
                AddLast(pagerItems);
            }
            var sb = new StringBuilder();

            if (_ajaxPagingEnabled)
            {
                foreach (PagerItem item in pagerItems)
                {
                    sb.Append(GenerateAjaxPagerElement(item));
                }
            }
            else
            {
                foreach (PagerItem item in pagerItems)
                {
                    sb.Append(GeneratePagerElement(item));
                }
            }
            var tb = new TagBuilder(_pagerOptions.ContainerTagName);

            if (!string.IsNullOrEmpty(_pagerOptions.Id))
            {
                tb.GenerateId(_pagerOptions.Id);
            }
            if (!string.IsNullOrEmpty(_pagerOptions.CssClass))
            {
                tb.AddCssClass(_pagerOptions.CssClass);
            }
            if (!string.IsNullOrEmpty(_pagerOptions.HorizontalAlign))
            {
                string strAlign = "text-align:" + _pagerOptions.HorizontalAlign.ToLower();
                if (_htmlAttributes == null)
                {
                    _htmlAttributes = new RouteValueDictionary {
                        { "style", strAlign }
                    }
                }
                ;
                else
                {
                    if (_htmlAttributes.Keys.Contains("style"))
                    {
                        _htmlAttributes["style"] += ";" + strAlign;
                    }
                }
            }
            tb.MergeAttributes(_htmlAttributes, true);
            if (_ajaxPagingEnabled)
            {
                var attrs = _ajaxOptions.ToUnobtrusiveHtmlAttributes();
                attrs.Remove("data-ajax-url");
                attrs.Remove("data-ajax-mode");
                if (_ajaxOptions.EnablePartialLoading)
                {
                    attrs.Add("data-ajax-partialloading", "true");
                }
                if (_pageIndex > 1)
                {
                    attrs.Add("data-ajax-currentpage", _pageIndex);
                }
                if (!string.IsNullOrWhiteSpace(_ajaxOptions.DataFormId))
                {
                    attrs.Add("data-ajax-dataformid", "#" + _ajaxOptions.DataFormId);
                }
                AddDataAttributes(attrs);
                tb.MergeAttributes(attrs, true);
            }
            if (_pagerOptions.ShowPageIndexBox)
            {
                if (!_ajaxPagingEnabled)
                {
                    var attrs = new Dictionary <string, object>();
                    AddDataAttributes(attrs);
                    tb.MergeAttributes(attrs, true);
                }
                sb.Append(BuildGoToPageSection());
            }
            else
            {
                sb.Length -= _pagerOptions.PagerItemsSeperator.Length;
            }
            tb.InnerHtml = sb.ToString();

            /* 注册客户端脚本
             * string pagerScript = string.Empty;
             * const string ctxItemName = "_MvcPagerScriptRegistered";
             * ViewContext viewCtx = _ajaxPagingEnabled ? _ajax.ViewContext : _html.ViewContext;
             * if (viewCtx.HttpContext.Items[ctxItemName] == null)
             * {
             *  var page = viewCtx.HttpContext.CurrentHandler as Page;
             *  var scriptUrl = (page ?? new Page()).ClientScript.GetWebResourceUrl(typeof (PagerHelper),"Webdiyer.WebControls.Mvc.MvcPager.min.js");
             *  pagerScript = "<script type=\"text/javascript\" src=\"" + scriptUrl + "\"></script>";
             *  viewCtx.HttpContext.Items[ctxItemName] = true;
             * }*/
            return(MvcHtmlString.Create(CopyrightText + /*pagerScript +*/ tb.ToString(TagRenderMode.Normal) + CopyrightText));
        }