/// <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)); }
/// <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)); }
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; }
/// <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); }
/// <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("<<", 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>", "<<"); } } //回复:和苏工沟通了下,可能会调整标签结构及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(">>", 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>", ">>"); } } pagingButtonsHtml.Append("</div>"); return MvcHtmlString.Create(pagingButtonsHtml.ToString()); }
/// <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); }
/// <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; }
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)); }
/// <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()); }
/// <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("<<", 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>", "<<"); } } //回复:和苏工沟通了下,可能会调整标签结构及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(">>", 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>", ">>"); } } pagingButtonsHtml.Append("</div>"); return(MvcHtmlString.Create(pagingButtonsHtml.ToString())); }