public static MvcHtmlString SortableHeader(this HtmlHelper row, object queryObject, string columnId, string title, object htmlAttributes = null) { var properties = string.Empty; IDictionary <string, object> attributes = new RouteValueDictionary(htmlAttributes); var sortingInfo = queryObject as ISortingParameters ?? new SortingParameters(); var currentSort = sortingInfo.Sort; var currentDirection = sortingInfo.SortDirection; var urlActionDelegate = sortingInfo.ActionFunc; const string direction = "asc"; var newSortDirection = direction; foreach (var attr in attributes) { properties += " " + attr.Key + "=\"" + attr.Value.ToString() + "\" "; } string sortableHeaderCssClass = Configurations.WebConfigurations.PagingConfigurations.SortableHeaderCssClass; string sortableHeader = sortableHeaderCssClass; var cssClass = sortableHeader; var sortIcon = ""; if (!string.IsNullOrEmpty(currentSort) && currentSort == columnId) { var sorted = Configurations.WebConfigurations.PagingConfigurations.SortedHeaderCssClass; cssClass += string.Format(" {0}", sorted); if (currentDirection.ToLower().StartsWith("d")) { string sortedIcondDescending = Configurations.WebConfigurations.PagingConfigurations.SortedIcondDescending; sortIcon = sortedIcondDescending; newSortDirection = direction; } else { string sortedIcondAscending = Configurations.WebConfigurations.PagingConfigurations.SortedIcondAscending; sortIcon = sortedIcondAscending; newSortDirection = "desc"; } } else { // default (initial sort) is ascending newSortDirection = direction; } var iconSpan = string.Format("<span class=\"glyphicon glyph{0}\"></span>", sortIcon); sortingInfo.Sort = columnId; sortingInfo.SortDirection = newSortDirection; var link = BasePagingExtensions.CreatePageLink(urlActionDelegate, queryObject, title, title); sortingInfo.Sort = currentSort; sortingInfo.SortDirection = currentDirection; return(MvcHtmlString.Create(string.Format("<th class=\"{0}\" id=\"{1}\" {2}>{3} {4} </th>", cssClass, columnId, properties, link, iconSpan))); }
public static MvcHtmlString PageLinks( this HtmlHelper html, object queryObject, Func <object, string> urlActionDelegate, int linksToShow = 0) { var pagingInfoViewModel = queryObject as IPagingParameters; var result = new StringBuilder(); if (pagingInfoViewModel != null) { var currentPage = pagingInfoViewModel.PageNumber + 1; var totalPages = pagingInfoViewModel.TotalPages; linksToShow = (linksToShow == 0) ? totalPages : linksToShow; if (pagingInfoViewModel.TotalPages <= 1) { return(MvcHtmlString.Create(string.Empty)); } var stringWriter = new StringWriter(result); string linkBlock = string.Empty; using (var textWriter = new NavHtmlTextWritter(stringWriter)) { { textWriter.AddAttribute(HtmlTextWriterAttribute.Class, Configurations.WebConfigurations.PagingConfigurations.PaginationCssClass); textWriter.RenderBeginTag(HtmlTextWriterTag.Ul); { if (currentPage > 1) { pagingInfoViewModel.PageNumber = 1; PageItem(textWriter, BasePagingExtensions.CreatePageLink(urlActionDelegate, queryObject, Configurations.WebConfigurations.PagingConfigurations.FirstPageText)); pagingInfoViewModel.PageNumber = currentPage - 1; PageItem(textWriter, BasePagingExtensions.CreatePageLink(urlActionDelegate, queryObject, Configurations.WebConfigurations.PagingConfigurations.PreviousPageText)); } // create page links int start = 1; int end = totalPages; start = PagerPounds(linksToShow, totalPages, currentPage, start, ref end); for (int i = start; i <= end; i++) { pagingInfoViewModel.PageNumber = i; if (i == currentPage) { PageItem(textWriter, BasePagingExtensions.CreatePageLink(urlActionDelegate, queryObject, i.ToString()), Configurations.WebConfigurations.PagingConfigurations.ActivePageClass); } else { PageItem(textWriter, BasePagingExtensions.CreatePageLink(urlActionDelegate, queryObject, i.ToString())); } } // create 'Next >>' link if (currentPage < totalPages) { pagingInfoViewModel.PageNumber = currentPage + 1; PageItem(textWriter, BasePagingExtensions.CreatePageLink(urlActionDelegate, queryObject, Configurations.WebConfigurations.PagingConfigurations.NextPageText)); pagingInfoViewModel.PageNumber = totalPages; PageItem(textWriter, BasePagingExtensions.CreatePageLink(urlActionDelegate, queryObject, Configurations.WebConfigurations.PagingConfigurations.LastPageText)); } textWriter.RenderEndTag(); } } } } return(MvcHtmlString.Create(result.ToString())); }