示例#1
0
 /// <summary>
 ///     呈现普通分页按钮
 /// </summary>
 /// <param name="paginationMode">分页按钮显示模式</param>
 /// <param name="html">被扩展的HtmlHelper</param>
 /// <param name="pagingList">数据集</param>
 /// <param name="numericPagingButtonCount">数字分页按钮显示个数</param>
 /// <returns>分页按钮html代码</returns>
 public static MvcHtmlString PagingButton
     (this HtmlHelper html,
     IPagingList pagingList,
     PaginationMode paginationMode = PaginationMode.NumericNextPrevious,
     int numericPagingButtonCount  = 7)
 {
     return(PagingButton(html, pagingList, false, null, paginationMode, numericPagingButtonCount));
 }
示例#2
0
 /// <summary>
 ///     呈现异步分页按钮
 /// </summary>
 /// <param name="paginationMode">分页按钮显示模式</param>
 /// <param name="html">被扩展的HtmlHelper</param>
 /// <param name="pagingList">数据集</param>
 /// <param name="updateTargetId">异步分页时,被更新的目标元素Id</param>
 /// <param name="numericPagingButtonCount">数字分页按钮显示个数</param>
 /// <param name="ajaxUrl"></param>
 /// <returns>分页按钮html代码</returns>
 public static MvcHtmlString PagingButtonForAjax
     (this HtmlHelper html,
     IPagingList pagingList,
     string updateTargetId,
     PaginationMode paginationMode = PaginationMode.NumericNextPrevious,
     int numericPagingButtonCount  = 7,
     string ajaxUrl = null)
 {
     return(PagingButton(html, pagingList, true, updateTargetId, paginationMode, numericPagingButtonCount,
                         ajaxUrl));
 }
示例#3
0
 protected OnDemandProcessingResult(IChunkFactory createChunkFactory, bool hasDocumentMap, bool hasInteractivity, ParameterInfoCollection parameters, int autoRefresh, int numberOfPages, ProcessingMessageList warnings, bool eventInfoChanged, EventInformation newEventInfo, PaginationMode updatedPaginationMode, ReportProcessingFlags updatedProcessingFlags, UserProfileState usedUserProfileState, ExecutionLogContext executionLogContext)
 {
     this.m_createChunkFactory           = createChunkFactory;
     this.m_hasDocumentMap               = hasDocumentMap;
     this.m_numberOfPages                = numberOfPages;
     this.m_hasInteractivity             = hasInteractivity;
     this.m_parameters                   = parameters;
     this.m_autoRefresh                  = autoRefresh;
     this.m_warnings                     = warnings;
     this.m_eventInfoChanged             = eventInfoChanged;
     this.m_newEventInfo                 = newEventInfo;
     this.m_parameters                   = parameters;
     this.m_updatedPaginationMode        = updatedPaginationMode;
     this.m_updatedReportProcessingFlags = updatedProcessingFlags;
     this.m_usedUserProfileState         = usedUserProfileState;
     this.m_executionLogContext          = executionLogContext;
 }
示例#4
0
 /// <summary>
 /// 呈现异步分页按钮
 /// </summary>
 /// <param name="paginationMode">分页按钮显示模式</param>
 /// <param name="html">被扩展的HtmlHelper</param>
 /// <param name="pagingDataSet">数据集</param>
 /// <param name="updateTargetId">异步分页时,被更新的目标元素Id</param>
 /// <param name="numericPagingButtonCount">数字分页按钮显示个数</param>
 /// <returns>分页按钮html代码</returns>
 public static MvcHtmlString AjaxPagingButton(this HtmlHelper html, IPagingDataSet pagingDataSet, string updateTargetId, PaginationMode paginationMode = PaginationMode.NumericNextPrevious, int numericPagingButtonCount = 7, string ajaxUrl = null)
 {
     return PagingButton(html, pagingDataSet, true, updateTargetId, paginationMode, numericPagingButtonCount, ajaxUrl);
 }
示例#5
0
        /// <summary>
        /// 呈现分页按钮
        /// </summary>
        /// <param name="html">被扩展的HtmlHelper</param>
        /// <param name="pagingDataSet">数据集</param>
        /// <param name="updateTargetId">异步分页时,被更新的目标元素Id</param>
        /// <param name="paginationMode">分页按钮显示模式</param>
        /// <param name="numericPagingButtonCount">数字分页按钮显示个数</param>
        /// <param name="enableAjax">是否使用ajax分页</param>
        /// <returns>分页按钮html代码</returns>
        private static MvcHtmlString PagingButton(this HtmlHelper html, IPagingDataSet pagingDataSet, bool enableAjax, string updateTargetId, PaginationMode paginationMode = PaginationMode.NumericNextPrevious, int numericPagingButtonCount = 7, string ajaxUrl = null)
        {
            if (pagingDataSet.TotalRecords == 0 || pagingDataSet.PageSize == 0)
                return MvcHtmlString.Empty;

            //计算总页数
            int totalPages = (int)(pagingDataSet.TotalRecords / (long)pagingDataSet.PageSize);
            if ((pagingDataSet.TotalRecords % pagingDataSet.PageSize) > 0)
                totalPages++;

            //未超过一页时不显示分页按钮
            if (totalPages <= 1)
                return MvcHtmlString.Empty;

            bool showFirst = false;
            if (paginationMode == PaginationMode.NextPreviousFirstLast)
                showFirst = true;

            bool showLast = false;
            if (paginationMode == PaginationMode.NextPreviousFirstLast)
                showLast = true;

            bool showPrevious = true;
            //if (paginationMode == PaginationMode.NextPrevious || paginationMode == PaginationMode.NextPreviousFirstLast || paginationMode == PaginationMode.NumericNextPrevious)
            //    showPrevious = true;

            bool showNext = true;
            //if (paginationMode == PaginationMode.NextPrevious || paginationMode == PaginationMode.NextPreviousFirstLast || paginationMode == PaginationMode.NumericNextPrevious)
            //    showNext = true;

            bool showNumeric = false;
            if (paginationMode == PaginationMode.NumericNextPrevious)
                showNumeric = true;

            //显示多少个数字分页按钮
            //int numericPageButtonCount = 10;

            //对pageIndex进行修正
            if ((pagingDataSet.PageIndex < 1) || (pagingDataSet.PageIndex > totalPages))
                pagingDataSet.PageIndex = 1;

            string pagingContainer = "<div class=\"tn-pagination-btn\"";
            if (enableAjax)
                pagingContainer += " plugin=\"ajaxPagingButton\" data=\"" + HttpUtility.HtmlEncode(Json.Encode(new { updateTargetId = updateTargetId })) + "\"";
            pagingContainer += ">";

            StringBuilder pagingButtonsHtml = new StringBuilder(pagingContainer);

            //构建 "首页"
            if (showFirst)
            {
                if ((pagingDataSet.PageIndex > 1) && (totalPages > numericPagingButtonCount))
                {
                    pagingButtonsHtml.AppendLine();
                    pagingButtonsHtml.AppendFormat(BuildLink("&lt;&lt;", GetPagingNavigateUrl(html, 1, ajaxUrl), "tn-page-first tn-page-thumb"));
                }
                else if (paginationMode == PaginationMode.NextPreviousFirstLast)
                {
                    pagingButtonsHtml.AppendLine();
                    pagingButtonsHtml.AppendFormat("<span class=\"tn-page-first tn-page-thumb\">{0}</span>", "&lt;&lt;");
                }
            }

            //回复:和苏工沟通了下,可能会调整标签结构及class名。但隔离开挺麻烦,暂时保留这个问题
            //mazq回复:是否可以把html代码放入view,另外如果允许用户选择每页记录数如何处理?

            //构建 "上一页"
            if (showPrevious)
            {
                pagingButtonsHtml.AppendLine();
                if (pagingDataSet.PageIndex == 1)
                    pagingButtonsHtml.AppendFormat("<span class=\"tn-page-prev tn-page-thumb\">{0}</span>", "上一页");
                else
                    pagingButtonsHtml.AppendFormat(BuildLink("上一页", GetPagingNavigateUrl(html, pagingDataSet.PageIndex - 1, ajaxUrl), "tn-page-prev tn-page-thumb"));
            }

            //构建 数字分页部分
            if (showNumeric)
            {
                int startNumericPageIndex;
                if (numericPagingButtonCount > totalPages || pagingDataSet.PageIndex - (numericPagingButtonCount / 2) <= 0)
                    startNumericPageIndex = 1;
                else if (pagingDataSet.PageIndex + (numericPagingButtonCount / 2) > totalPages)
                    startNumericPageIndex = totalPages - numericPagingButtonCount + 1;
                else
                    startNumericPageIndex = pagingDataSet.PageIndex - (numericPagingButtonCount / 2);

                if (startNumericPageIndex < 1)
                    startNumericPageIndex = 1;

                int lastNumericPageIndex = startNumericPageIndex + numericPagingButtonCount - 1;
                if (lastNumericPageIndex > totalPages)
                    lastNumericPageIndex = totalPages;

                if (startNumericPageIndex > 1)
                {
                    for (int i = 1; i < startNumericPageIndex; i++)
                    {
                        pagingButtonsHtml.AppendLine();

                        if (i > 3)
                            break;
                        if (i == 3)
                            pagingButtonsHtml.Append("<span class=\"tn-page-break\">...</span>");
                        else
                        {
                            if (pagingDataSet.PageIndex == i)
                                pagingButtonsHtml.AppendFormat("<span class=\"tn-page-number tn-selected\">{0}</span>", i);
                            else
                                pagingButtonsHtml.AppendFormat(BuildLink(i.ToString(), GetPagingNavigateUrl(html, i, ajaxUrl)));
                        }
                    }
                }

                for (int i = startNumericPageIndex; i <= lastNumericPageIndex; i++)
                {
                    pagingButtonsHtml.AppendLine();
                    if (pagingDataSet.PageIndex == i)
                        pagingButtonsHtml.AppendFormat("<span class=\"tn-page-number tn-selected\">{0}</span>", i);
                    else
                        pagingButtonsHtml.AppendFormat(BuildLink(i.ToString(), GetPagingNavigateUrl(html, i, ajaxUrl)));
                }

                if (lastNumericPageIndex < totalPages)
                {
                    int lastStart = lastNumericPageIndex + 1;
                    if (totalPages - lastStart > 2)
                        lastStart = totalPages - 2;

                    for (int i = lastStart; i <= totalPages; i++)
                    {
                        pagingButtonsHtml.AppendLine();
                        if ((i == lastStart) && (totalPages - lastNumericPageIndex > 3))
                        {
                            pagingButtonsHtml.AppendLine();
                            pagingButtonsHtml.Append("<span class=\"tn-page-break\">...</span>");
                            continue;
                        }

                        if (pagingDataSet.PageIndex == i)
                            pagingButtonsHtml.AppendFormat("<span class=\"tn-page-number tn-selected\">{0}</span>", i);
                        else
                            pagingButtonsHtml.AppendFormat(BuildLink(i.ToString(), GetPagingNavigateUrl(html, i, ajaxUrl)));
                    }
                }

            }

            if (showNext)
            {
                pagingButtonsHtml.AppendLine();
                if (pagingDataSet.PageIndex == totalPages)
                    pagingButtonsHtml.AppendFormat("<span class=\"tn-page-thumb tn-page-next\">{0}</span>", "下一页");
                else
                    pagingButtonsHtml.AppendFormat(BuildLink("下一页", GetPagingNavigateUrl(html, pagingDataSet.PageIndex + 1, ajaxUrl), "tn-page-thumb tn-page-next"));
            }

            if (showLast)
            {
                if ((pagingDataSet.PageIndex < totalPages) && (totalPages > numericPagingButtonCount))
                {
                    pagingButtonsHtml.AppendLine();
                    pagingButtonsHtml.AppendFormat(BuildLink("&gt;&gt;", GetPagingNavigateUrl(html, totalPages, ajaxUrl), "tn-page-thumb tn-page-last"));
                }
                else if (paginationMode == PaginationMode.NextPreviousFirstLast)
                {
                    pagingButtonsHtml.AppendLine();
                    pagingButtonsHtml.AppendFormat("<span class=\"tn-page-thumb tn-page-last\">{0}</span>", "&gt;&gt;");
                }
            }
            pagingButtonsHtml.Append("</div>");
            return MvcHtmlString.Create(pagingButtonsHtml.ToString());
        }
示例#6
0
 /// <summary>
 /// 呈现普通分页按钮
 /// </summary>
 /// <param name="paginationMode">分页按钮显示模式</param>
 /// <param name="html">被扩展的HtmlHelper</param>
 /// <param name="pagingDataSet">数据集</param>
 /// <param name="numericPagingButtonCount">数字分页按钮显示个数</param>
 /// <returns>分页按钮html代码</returns>
 public static MvcHtmlString PagingButton(this HtmlHelper html, IPagingDataSet pagingDataSet, PaginationMode paginationMode = PaginationMode.NumericNextPrevious, int numericPagingButtonCount = 7)
 {
     return PagingButton(html, pagingDataSet, false, null, paginationMode, numericPagingButtonCount);
 }
示例#7
0
        /// <summary>
        ///     呈现分页按钮
        /// </summary>
        /// <param name="html">被扩展的HtmlHelper</param>
        /// <param name="pagingList">数据集</param>
        /// <param name="enableAjax">是否使用ajax分页</param>
        /// <param name="updateTargetId">异步分页时,被更新的目标元素Id</param>
        /// <param name="paginationMode">分页按钮显示模式</param>
        /// <param name="numericPagingButtonCount">数字分页按钮显示个数</param>
        /// <param name="ajaxUrl"></param>
        /// <returns>分页按钮html代码</returns>
        private static MvcHtmlString PagingButton
            (this HtmlHelper html,
            IPagingList pagingList,
            bool enableAjax, string updateTargetId,
            PaginationMode paginationMode = PaginationMode.NumericNextPrevious,
            int numericPagingButtonCount  = 7,
            string ajaxUrl = null)
        {
            if (pagingList == null)
            {
                return(MvcHtmlString.Empty);
            }
            if (pagingList.TotalCount == 0 || pagingList.PageSize == 0)
            {
                return(MvcHtmlString.Empty);
            }

            //计算总页数
            //var totalPages = (int) (pagingList.TotalCount/pagingList.PageSize);
            //if ((pagingList.TotalCount%pagingList.PageSize) > 0)
            //    totalPages++;
            var totalPages = pagingList.TotalPages;

            //未超过一页时不显示分页按钮
            if (totalPages <= 1)
            {
                return(MvcHtmlString.Empty);
            }

            var showFirst = paginationMode == PaginationMode.NextPreviousFirstLast || paginationMode == PaginationMode.NumericNextPreviousFirstLast;

            var showLast = paginationMode == PaginationMode.NextPreviousFirstLast || paginationMode == PaginationMode.NumericNextPreviousFirstLast;

            var showPrevious = true;
            var showNext     = true;

            var showNumeric = paginationMode == PaginationMode.NumericNextPrevious || paginationMode == PaginationMode.NumericNextPreviousFirstLast;

            //显示多少个数字分页按钮
            //int numericPageButtonCount = 10;

            //对pageIndex进行修正
            if ((pagingList.PageIndex < 1) || (pagingList.PageIndex > totalPages))
            {
                pagingList.PageIndex = 1;
            }

            var pagingContainer = new StringBuilder();

            pagingContainer.Append("<nav");
            //string pagingContainer = "<div class=\"tn-pagination-btn\"";
            if (enableAjax)
            {
                pagingContainer.Append(" plugin=\"ajaxPagingButton\" data-updatetargetid=\"" + updateTargetId + "\"");
            }
            pagingContainer.Append("><ul class=\"pager\">");

            var pagingButtonsHtml = new StringBuilder(pagingContainer.ToString());

            //构建 "首页"
            if (showFirst)
            {
                pagingButtonsHtml.AppendLine();

                if (pagingList.PageIndex == 1)
                {
                    pagingButtonsHtml.Append("<li class=\"disabled\"><span>首页</span></li>");
                }
                else
                {
                    pagingButtonsHtml.AppendFormat("<li><a href=\"{0}\"><span>首页</span></a></li>",
                                                   GetPagingNavigateUrl(html, 1, ajaxUrl));
                }
            }

            //构建 "上一页"
            pagingButtonsHtml.AppendLine();
            if (pagingList.PageIndex == 1)
            {
                pagingButtonsHtml.Append("<li class=\"disabled\"><span>上一页</span></li>");
            }
            else
            {
                pagingButtonsHtml.AppendFormat("<li><a href=\"{0}\"><span>上一页</span></a></li>",
                                               GetPagingNavigateUrl(html, pagingList.PageIndex - 1, ajaxUrl));
            }
            //构建 数字分页部分
            if (showNumeric)
            {
                int startNumericPageIndex;
                if (numericPagingButtonCount > totalPages || pagingList.PageIndex - (numericPagingButtonCount / 2) <= 0)
                {
                    startNumericPageIndex = 1;
                }
                else if (pagingList.PageIndex + (numericPagingButtonCount / 2) > totalPages)
                {
                    startNumericPageIndex = totalPages - numericPagingButtonCount + 1;
                }
                else
                {
                    startNumericPageIndex = pagingList.PageIndex - (numericPagingButtonCount / 2);
                }

                if (startNumericPageIndex < 1)
                {
                    startNumericPageIndex = 1;
                }

                var lastNumericPageIndex = startNumericPageIndex + numericPagingButtonCount - 1;
                if (lastNumericPageIndex > totalPages)
                {
                    lastNumericPageIndex = totalPages;
                }

                if (startNumericPageIndex > 1)
                {
                    for (var i = 1; i < startNumericPageIndex; i++)
                    {
                        pagingButtonsHtml.AppendLine();

                        if (i > 3)
                        {
                            break;
                        }
                        if (i == 3)
                        {
                            pagingButtonsHtml.Append("<li><span>...</span></li>");
                        }
                        else
                        {
                            if (pagingList.PageIndex == i)
                            {
                                pagingButtonsHtml.AppendFormat("<li class=\"active\"><span>{0}</span></li>", i);
                            }
                            else
                            {
                                pagingButtonsHtml.AppendFormat("<li><a href=\"{0}\"><span>{1}</span></a></li>",
                                                               GetPagingNavigateUrl(html, i, ajaxUrl), i);
                            }
                        }
                    }
                }

                for (var i = startNumericPageIndex; i <= lastNumericPageIndex; i++)
                {
                    pagingButtonsHtml.AppendLine();
                    if (pagingList.PageIndex == i)
                    {
                        pagingButtonsHtml.AppendFormat("<li class=\"active\"><span>{0}</span></li>", i);
                    }
                    else
                    {
                        pagingButtonsHtml.AppendFormat("<li><a href=\"{0}\"><span>{1}</span></a></li>",
                                                       GetPagingNavigateUrl(html, i, ajaxUrl), i);
                    }
                }

                if (lastNumericPageIndex < totalPages)
                {
                    var lastStart = lastNumericPageIndex + 1;
                    if (totalPages - lastStart > 2)
                    {
                        lastStart = totalPages - 2;
                    }

                    for (var i = lastStart; i <= totalPages; i++)
                    {
                        pagingButtonsHtml.AppendLine();
                        if ((i == lastStart) && (totalPages - lastNumericPageIndex > 3))
                        {
                            pagingButtonsHtml.AppendLine();
                            pagingButtonsHtml.Append("<li><span>...</span></li>");
                            continue;
                        }

                        if (pagingList.PageIndex == i)
                        {
                            pagingButtonsHtml.AppendFormat("<li class=\"active\"><span>{0}</span></li>", i);
                        }
                        else
                        {
                            pagingButtonsHtml.AppendFormat("<li><a href=\"{0}\"><span>{1}</span></a></li>",
                                                           GetPagingNavigateUrl(html, i, ajaxUrl), i);
                        }
                    }
                }
            }
            //构建 "下一页"
            pagingButtonsHtml.AppendLine();
            if (pagingList.PageIndex == totalPages)
            {
                pagingButtonsHtml.Append("<li class=\"disabled\"><span>下一页</span></li>");
            }
            else
            {
                pagingButtonsHtml.AppendFormat("<li><a href=\"{0}\"><span>下一页</span></a></li>",
                                               GetPagingNavigateUrl(html, pagingList.PageIndex + 1, ajaxUrl));
            }
            //构建 "末页"
            if (showLast)
            {
                pagingButtonsHtml.AppendLine();
                if (pagingList.PageIndex == totalPages)
                {
                    pagingButtonsHtml.Append("<li class=\"disabled\"><span>末页</span></li>");
                }
                else
                {
                    pagingButtonsHtml.AppendFormat("<li><a href=\"{0}\"><span>末页</span></a></li>",
                                                   GetPagingNavigateUrl(html, totalPages, ajaxUrl));
                }
            }
            pagingButtonsHtml.Append("</ul></nav>");
            return(MvcHtmlString.Create(pagingButtonsHtml.ToString()));
        }
 protected PaginationMode GetUpdatedPaginationMode(Hashtable renderProperties, PaginationMode clientPaginationMode)
 {
     try
     {
         if (renderProperties != null)
         {
             object obj = renderProperties["UpdatedPaginationMode"];
             if (obj != null)
             {
                 return((PaginationMode)obj);
             }
         }
     }
     catch (InvalidCastException)
     {
     }
     return(PaginationMode.Estimate);
 }
 public PaginationTS(Pagination pagination)
 {
     this.mode = pagination.GetMode();
     this.elementsPerPage = pagination.GetElementsPerPage();
     this.currentPage = (pagination as Pagination.Paginate)?.CurrentPage;
 }
示例#10
0
        protected override string PropertyValidation(PropertyInfo pi)
        {
            if (pi.Name == nameof(ElementsPerPage))
            {
                if (ElementsPerPage != null && !ShouldHaveElements)
                {
                    return(UserQueryMessage._0ShouldBeNullIf1Is2.NiceToString().FormatWith(pi.NiceName(), NicePropertyName(() => PaginationMode), PaginationMode?.Let(pm => pm.NiceToString()) ?? ""));
                }

                if (ElementsPerPage == null && ShouldHaveElements)
                {
                    return(UserQueryMessage._0ShouldBeSetIf1Is2.NiceToString().FormatWith(pi.NiceName(), NicePropertyName(() => PaginationMode), PaginationMode.NiceToString()));
                }
            }

            if (pi.Name == nameof(Filters) && WithoutFilters && Filters.Any())
            {
                return(UserQueryMessage._0ShouldBeEmptyIf1IsSet.NiceToString().FormatWith(pi.NiceName(), ReflectionTools.GetPropertyInfo(() => WithoutFilters).NiceName()));
            }

            return(base.PropertyValidation(pi));
        }
示例#11
0
        /// <summary>
        ///     呈现分页按钮
        /// </summary>
        /// <param name="html">被扩展的HtmlHelper</param>
        /// <param name="pagingList">数据集</param>
        /// <param name="enableAjax">是否使用ajax分页</param>
        /// <param name="updateTargetId">异步分页时,被更新的目标元素Id</param>
        /// <param name="paginationMode">分页按钮显示模式</param>
        /// <param name="numericPagingButtonCount">数字分页按钮显示个数</param>
        /// <param name="ajaxUrl"></param>
        /// <returns>分页按钮html代码</returns>
        private static MvcHtmlString PagingButton(this HtmlHelper html,
                IPagingList pagingList,
                bool enableAjax, string updateTargetId,
                PaginationMode paginationMode = PaginationMode.NumericNextPrevious,
                int numericPagingButtonCount = 7,
                string ajaxUrl = null)
        {
            if (pagingList == null)
                return MvcHtmlString.Empty;
            if (pagingList.TotalCount == 0 || pagingList.PageSize == 0)
                return MvcHtmlString.Empty;

            //计算总页数
            //var totalPages = (int) (pagingList.TotalCount/pagingList.PageSize);
            //if ((pagingList.TotalCount%pagingList.PageSize) > 0)
            //    totalPages++;
            var totalPages = pagingList.TotalPages;

            //未超过一页时不显示分页按钮
            if (totalPages <= 1)
                return MvcHtmlString.Empty;

            var showFirst = paginationMode == PaginationMode.NextPreviousFirstLast || paginationMode == PaginationMode.NumericNextPreviousFirstLast;

            var showLast = paginationMode == PaginationMode.NextPreviousFirstLast || paginationMode == PaginationMode.NumericNextPreviousFirstLast;

            var showPrevious = true;
            var showNext = true;

            var showNumeric = paginationMode == PaginationMode.NumericNextPrevious || paginationMode == PaginationMode.NumericNextPreviousFirstLast;

            //显示多少个数字分页按钮
            //int numericPageButtonCount = 10;

            //对pageIndex进行修正
            if ((pagingList.PageIndex < 1) || (pagingList.PageIndex > totalPages))
                pagingList.PageIndex = 1;

            var pagingContainer = new StringBuilder();
            pagingContainer.Append("<nav");
            //string pagingContainer = "<div class=\"tn-pagination-btn\"";
            if (enableAjax)
                pagingContainer.Append(" plugin=\"ajaxPagingButton\" data-updatetargetid=\"" + updateTargetId + "\"");
            pagingContainer.Append("><ul class=\"pager\">");

            var pagingButtonsHtml = new StringBuilder(pagingContainer.ToString());

            //构建 "首页"
            if (showFirst)
            {
                pagingButtonsHtml.AppendLine();

                if (pagingList.PageIndex == 1)
                    pagingButtonsHtml.Append("<li class=\"disabled\"><span>首页</span></li>");
                else
                    pagingButtonsHtml.AppendFormat("<li><a href=\"{0}\"><span>首页</span></a></li>",
                        GetPagingNavigateUrl(html, 1, ajaxUrl));
            }

            //构建 "上一页"
            pagingButtonsHtml.AppendLine();
            if (pagingList.PageIndex == 1)
                pagingButtonsHtml.Append("<li class=\"disabled\"><span>上一页</span></li>");
            else
                pagingButtonsHtml.AppendFormat("<li><a href=\"{0}\"><span>上一页</span></a></li>",
                    GetPagingNavigateUrl(html, pagingList.PageIndex - 1, ajaxUrl));
            //构建 数字分页部分
            if (showNumeric)
            {
                int startNumericPageIndex;
                if (numericPagingButtonCount > totalPages || pagingList.PageIndex - (numericPagingButtonCount / 2) <= 0)
                    startNumericPageIndex = 1;
                else if (pagingList.PageIndex + (numericPagingButtonCount / 2) > totalPages)
                    startNumericPageIndex = totalPages - numericPagingButtonCount + 1;
                else
                    startNumericPageIndex = pagingList.PageIndex - (numericPagingButtonCount / 2);

                if (startNumericPageIndex < 1)
                    startNumericPageIndex = 1;

                var lastNumericPageIndex = startNumericPageIndex + numericPagingButtonCount - 1;
                if (lastNumericPageIndex > totalPages)
                    lastNumericPageIndex = totalPages;

                if (startNumericPageIndex > 1)
                {
                    for (var i = 1; i < startNumericPageIndex; i++)
                    {
                        pagingButtonsHtml.AppendLine();

                        if (i > 3)
                            break;
                        if (i == 3)
                            pagingButtonsHtml.Append("<li><span>...</span></li>");
                        else
                        {
                            if (pagingList.PageIndex == i)
                                pagingButtonsHtml.AppendFormat("<li class=\"active\"><span>{0}</span></li>", i);
                            else
                                pagingButtonsHtml.AppendFormat("<li><a href=\"{0}\"><span>{1}</span></a></li>",
                                    GetPagingNavigateUrl(html, i, ajaxUrl), i);
                        }
                    }
                }

                for (var i = startNumericPageIndex; i <= lastNumericPageIndex; i++)
                {
                    pagingButtonsHtml.AppendLine();
                    if (pagingList.PageIndex == i)
                        pagingButtonsHtml.AppendFormat("<li class=\"active\"><span>{0}</span></li>", i);
                    else
                        pagingButtonsHtml.AppendFormat("<li><a href=\"{0}\"><span>{1}</span></a></li>",
                            GetPagingNavigateUrl(html, i, ajaxUrl), i);
                }

                if (lastNumericPageIndex < totalPages)
                {
                    var lastStart = lastNumericPageIndex + 1;
                    if (totalPages - lastStart > 2)
                        lastStart = totalPages - 2;

                    for (var i = lastStart; i <= totalPages; i++)
                    {
                        pagingButtonsHtml.AppendLine();
                        if ((i == lastStart) && (totalPages - lastNumericPageIndex > 3))
                        {
                            pagingButtonsHtml.AppendLine();
                            pagingButtonsHtml.Append("<li><span>...</span></li>");
                            continue;
                        }

                        if (pagingList.PageIndex == i)
                            pagingButtonsHtml.AppendFormat("<li class=\"active\"><span>{0}</span></li>", i);
                        else
                            pagingButtonsHtml.AppendFormat("<li><a href=\"{0}\"><span>{1}</span></a></li>",
                                GetPagingNavigateUrl(html, i, ajaxUrl), i);
                    }
                }
            }
            //构建 "下一页"
            pagingButtonsHtml.AppendLine();
            if (pagingList.PageIndex == totalPages)
                pagingButtonsHtml.Append("<li class=\"disabled\"><span>下一页</span></li>");
            else
                pagingButtonsHtml.AppendFormat("<li><a href=\"{0}\"><span>下一页</span></a></li>",
                    GetPagingNavigateUrl(html, pagingList.PageIndex + 1, ajaxUrl));
            //构建 "末页"
            if (showLast)
            {
                pagingButtonsHtml.AppendLine();
                if (pagingList.PageIndex == totalPages)
                    pagingButtonsHtml.Append("<li class=\"disabled\"><span>末页</span></li>");
                else
                    pagingButtonsHtml.AppendFormat("<li><a href=\"{0}\"><span>末页</span></a></li>",
                        GetPagingNavigateUrl(html, totalPages, ajaxUrl));
            }
            pagingButtonsHtml.Append("</ul></nav>");
            return MvcHtmlString.Create(pagingButtonsHtml.ToString());
        }
示例#12
0
        /// <summary>
        /// 呈现分页按钮
        /// </summary>
        /// <param name="html">被扩展的HtmlHelper</param>
        /// <param name="pagingDataSet">数据集</param>
        /// <param name="updateTargetId">异步分页时,被更新的目标元素Id</param>
        /// <param name="paginationMode">分页按钮显示模式</param>
        /// <param name="numericPagingButtonCount">数字分页按钮显示个数</param>
        /// <param name="enableAjax">是否使用ajax分页</param>
        /// <returns>分页按钮html代码</returns>
        private static MvcHtmlString PagingButton(this HtmlHelper html, IPagingDataSet pagingDataSet, bool enableAjax, string updateTargetId, PaginationMode paginationMode = PaginationMode.NumericNextPrevious, int numericPagingButtonCount = 7, string ajaxUrl = null)
        {
            if (pagingDataSet.TotalRecords == 0 || pagingDataSet.PageSize == 0)
            {
                return(MvcHtmlString.Empty);
            }

            //计算总页数
            int totalPages = (int)(pagingDataSet.TotalRecords / (long)pagingDataSet.PageSize);

            if ((pagingDataSet.TotalRecords % pagingDataSet.PageSize) > 0)
            {
                totalPages++;
            }

            //未超过一页时不显示分页按钮
            if (totalPages <= 1)
            {
                return(MvcHtmlString.Empty);
            }

            bool showFirst = false;

            if (paginationMode == PaginationMode.NextPreviousFirstLast)
            {
                showFirst = true;
            }

            bool showLast = false;

            if (paginationMode == PaginationMode.NextPreviousFirstLast)
            {
                showLast = true;
            }

            bool showPrevious = true;
            //if (paginationMode == PaginationMode.NextPrevious || paginationMode == PaginationMode.NextPreviousFirstLast || paginationMode == PaginationMode.NumericNextPrevious)
            //    showPrevious = true;

            bool showNext = true;
            //if (paginationMode == PaginationMode.NextPrevious || paginationMode == PaginationMode.NextPreviousFirstLast || paginationMode == PaginationMode.NumericNextPrevious)
            //    showNext = true;

            bool showNumeric = false;

            if (paginationMode == PaginationMode.NumericNextPrevious)
            {
                showNumeric = true;
            }

            //显示多少个数字分页按钮
            //int numericPageButtonCount = 10;

            //对pageIndex进行修正
            if ((pagingDataSet.PageIndex < 1) || (pagingDataSet.PageIndex > totalPages))
            {
                pagingDataSet.PageIndex = 1;
            }

            string pagingContainer = "<div class=\"tn-pagination-btn\"";

            if (enableAjax)
            {
                pagingContainer += " plugin=\"ajaxPagingButton\" data=\"" + HttpUtility.HtmlEncode(Json.Encode(new { updateTargetId = updateTargetId })) + "\"";
            }
            pagingContainer += ">";

            StringBuilder pagingButtonsHtml = new StringBuilder(pagingContainer);

            //构建 "首页"
            if (showFirst)
            {
                if ((pagingDataSet.PageIndex > 1) && (totalPages > numericPagingButtonCount))
                {
                    pagingButtonsHtml.AppendLine();
                    pagingButtonsHtml.AppendFormat(BuildLink("&lt;&lt;", GetPagingNavigateUrl(html, 1, ajaxUrl), "tn-page-first tn-page-thumb"));
                }
                else if (paginationMode == PaginationMode.NextPreviousFirstLast)
                {
                    pagingButtonsHtml.AppendLine();
                    pagingButtonsHtml.AppendFormat("<span class=\"tn-page-first tn-page-thumb\">{0}</span>", "&lt;&lt;");
                }
            }


            //回复:和苏工沟通了下,可能会调整标签结构及class名。但隔离开挺麻烦,暂时保留这个问题
            //mazq回复:是否可以把html代码放入view,另外如果允许用户选择每页记录数如何处理?

            //构建 "上一页"
            if (showPrevious)
            {
                pagingButtonsHtml.AppendLine();
                if (pagingDataSet.PageIndex == 1)
                {
                    pagingButtonsHtml.AppendFormat("<span class=\"tn-page-prev tn-page-thumb\">{0}</span>", "上一页");
                }
                else
                {
                    pagingButtonsHtml.AppendFormat(BuildLink("上一页", GetPagingNavigateUrl(html, pagingDataSet.PageIndex - 1, ajaxUrl), "tn-page-prev tn-page-thumb"));
                }
            }

            //构建 数字分页部分
            if (showNumeric)
            {
                int startNumericPageIndex;
                if (numericPagingButtonCount > totalPages || pagingDataSet.PageIndex - (numericPagingButtonCount / 2) <= 0)
                {
                    startNumericPageIndex = 1;
                }
                else if (pagingDataSet.PageIndex + (numericPagingButtonCount / 2) > totalPages)
                {
                    startNumericPageIndex = totalPages - numericPagingButtonCount + 1;
                }
                else
                {
                    startNumericPageIndex = pagingDataSet.PageIndex - (numericPagingButtonCount / 2);
                }

                if (startNumericPageIndex < 1)
                {
                    startNumericPageIndex = 1;
                }

                int lastNumericPageIndex = startNumericPageIndex + numericPagingButtonCount - 1;
                if (lastNumericPageIndex > totalPages)
                {
                    lastNumericPageIndex = totalPages;
                }

                if (startNumericPageIndex > 1)
                {
                    for (int i = 1; i < startNumericPageIndex; i++)
                    {
                        pagingButtonsHtml.AppendLine();

                        if (i > 3)
                        {
                            break;
                        }
                        if (i == 3)
                        {
                            pagingButtonsHtml.Append("<span class=\"tn-page-break\">...</span>");
                        }
                        else
                        {
                            if (pagingDataSet.PageIndex == i)
                            {
                                pagingButtonsHtml.AppendFormat("<span class=\"tn-page-number tn-selected\">{0}</span>", i);
                            }
                            else
                            {
                                pagingButtonsHtml.AppendFormat(BuildLink(i.ToString(), GetPagingNavigateUrl(html, i, ajaxUrl)));
                            }
                        }
                    }
                }

                for (int i = startNumericPageIndex; i <= lastNumericPageIndex; i++)
                {
                    pagingButtonsHtml.AppendLine();
                    if (pagingDataSet.PageIndex == i)
                    {
                        pagingButtonsHtml.AppendFormat("<span class=\"tn-page-number tn-selected\">{0}</span>", i);
                    }
                    else
                    {
                        pagingButtonsHtml.AppendFormat(BuildLink(i.ToString(), GetPagingNavigateUrl(html, i, ajaxUrl)));
                    }
                }

                if (lastNumericPageIndex < totalPages)
                {
                    int lastStart = lastNumericPageIndex + 1;
                    if (totalPages - lastStart > 2)
                    {
                        lastStart = totalPages - 2;
                    }

                    for (int i = lastStart; i <= totalPages; i++)
                    {
                        pagingButtonsHtml.AppendLine();
                        if ((i == lastStart) && (totalPages - lastNumericPageIndex > 3))
                        {
                            pagingButtonsHtml.AppendLine();
                            pagingButtonsHtml.Append("<span class=\"tn-page-break\">...</span>");
                            continue;
                        }

                        if (pagingDataSet.PageIndex == i)
                        {
                            pagingButtonsHtml.AppendFormat("<span class=\"tn-page-number tn-selected\">{0}</span>", i);
                        }
                        else
                        {
                            pagingButtonsHtml.AppendFormat(BuildLink(i.ToString(), GetPagingNavigateUrl(html, i, ajaxUrl)));
                        }
                    }
                }
            }

            if (showNext)
            {
                pagingButtonsHtml.AppendLine();
                if (pagingDataSet.PageIndex == totalPages)
                {
                    pagingButtonsHtml.AppendFormat("<span class=\"tn-page-thumb tn-page-next\">{0}</span>", "下一页");
                }
                else
                {
                    pagingButtonsHtml.AppendFormat(BuildLink("下一页", GetPagingNavigateUrl(html, pagingDataSet.PageIndex + 1, ajaxUrl), "tn-page-thumb tn-page-next"));
                }
            }

            if (showLast)
            {
                if ((pagingDataSet.PageIndex < totalPages) && (totalPages > numericPagingButtonCount))
                {
                    pagingButtonsHtml.AppendLine();
                    pagingButtonsHtml.AppendFormat(BuildLink("&gt;&gt;", GetPagingNavigateUrl(html, totalPages, ajaxUrl), "tn-page-thumb tn-page-last"));
                }
                else if (paginationMode == PaginationMode.NextPreviousFirstLast)
                {
                    pagingButtonsHtml.AppendLine();
                    pagingButtonsHtml.AppendFormat("<span class=\"tn-page-thumb tn-page-last\">{0}</span>", "&gt;&gt;");
                }
            }
            pagingButtonsHtml.Append("</div>");
            return(MvcHtmlString.Create(pagingButtonsHtml.ToString()));
        }