public static IHtmlString AjaxPager <TModel, TValue>(this AjaxHelper <TModel> ajaxHelper, PagingHelper <TValue> model, string actionName, AjaxOptions ajaxOptions, string search, int PagerSize = 5) { if (model.TotalCount == 0) { return(new MvcHtmlString("")); } TagBuilder divPrev = new TagBuilder("div"); int cGroupSize = PagerSize; var pageCount = (int)Math.Ceiling(model.TotalCount / (double)model.PageSize); int CurrentPage = model.CurrentPage; // cleanup any out bounds page number passed CurrentPage = Math.Max(CurrentPage, 1); CurrentPage = Math.Min(CurrentPage, pageCount); var urlHelper = new UrlHelper(ajaxHelper.ViewContext.RequestContext, ajaxHelper.RouteCollection); //var actionName = ajaxHelper.ViewContext.RouteData.GetRequiredString("Action"); var lastGroupNumber = CurrentPage; while ((lastGroupNumber % cGroupSize != 0)) { lastGroupNumber++; } var groupEnd = Math.Min(lastGroupNumber, pageCount); var groupStart = lastGroupNumber - (cGroupSize - 1); // next if (CurrentPage < pageCount) { var routingValues = new RouteValueDictionary(new { page = (model.PageIndex + 1), Search = search }); var next = ajaxHelper.ActionLink("التالى", actionName, routingValues, ajaxOptions, new Dictionary <string, object> { { "class", "next" } }); divPrev.InnerHtml += next.ToString(); } // next page if (pageCount > groupEnd) { var routingValues = new RouteValueDictionary(new { page = ((groupEnd + 1).ToString()), Search = search }); var next = ajaxHelper.ActionLink("...", actionName, routingValues, ajaxOptions, new Dictionary <string, object> { { "class", "next-dots" } }); divPrev.InnerHtml += next.ToString(); } if (pageCount > 1) { for (var i = groupStart; i <= groupEnd; i++) { var routingValues = new RouteValueDictionary(new { page = (i), Search = search }); var next = ajaxHelper.ActionLink((i).ToString(), actionName, routingValues, ajaxOptions, new Dictionary <string, object> { { "class", ((i == CurrentPage)) ? "selected-page" : "page" } }); divPrev.InnerHtml += next.ToString(); } } // prev page if (CurrentPage > cGroupSize) { var routingValues = new RouteValueDictionary(new { page = ((groupStart - cGroupSize).ToString()), Search = search }); var next = ajaxHelper.ActionLink("...", actionName, routingValues, ajaxOptions, new Dictionary <string, object> { { "class", "previous-dots" } }); divPrev.InnerHtml += next.ToString(); } //prev if (CurrentPage > 1) { var routingValues = new RouteValueDictionary(new { page = (model.PageIndex - 1), Search = search }); var next = ajaxHelper.ActionLink("السابق", "GetData", routingValues, ajaxOptions, new Dictionary <string, object> { { "class", "previous" } }); divPrev.InnerHtml += next.ToString(); } string output = divPrev.ToString(); return(new MvcHtmlString(output)); }
public static IHtmlString Pager <TModel, TValue>(this HtmlHelper <TModel> html, PagingHelper <TValue> model, int PagerSize = 5) { TagBuilder divPrev = new TagBuilder("div"); int cGroupSize = PagerSize; var pageCount = (int)Math.Ceiling(model.TotalCount / (double)model.PageSize); int CurrentPage = model.CurrentPage; // cleanup any out bounds page number passed CurrentPage = Math.Max(CurrentPage, 1); CurrentPage = Math.Min(CurrentPage, pageCount); var urlHelper = new UrlHelper(html.ViewContext.RequestContext, html.RouteCollection); var actionName = html.ViewContext.RouteData.GetRequiredString("Action"); var lastGroupNumber = CurrentPage; while ((lastGroupNumber % cGroupSize != 0)) { lastGroupNumber++; } var groupEnd = Math.Min(lastGroupNumber, pageCount); var groupStart = lastGroupNumber - (cGroupSize - 1); // next if (CurrentPage < pageCount) { var next = new TagBuilder("a"); next.SetInnerText("التالى"); next.AddCssClass("next"); var routingValues = new RouteValueDictionary(new { page = (model.PageIndex + 1) }); next.MergeAttribute("href", urlHelper.Action(actionName, routingValues)); divPrev.InnerHtml += next.ToString(); } // next page if (pageCount > groupEnd) { var nextPage = new TagBuilder("a"); nextPage.SetInnerText("..."); nextPage.AddCssClass("next-dots"); var routingValues = new RouteValueDictionary(new { page = ((groupEnd + 1).ToString()) }); nextPage.MergeAttribute("href", urlHelper.Action(actionName, routingValues)); divPrev.InnerHtml += nextPage.ToString(); } if (pageCount > 1) { for (var i = groupStart; i <= groupEnd; i++) { var pageNumber = new TagBuilder("a"); pageNumber.AddCssClass(((i == CurrentPage)) ? "selected-page" : "page"); pageNumber.SetInnerText((i).ToString()); var routingValues = new RouteValueDictionary(new { page = (i) }); pageNumber.MergeAttribute("href", urlHelper.Action(actionName, routingValues)); divPrev.InnerHtml += pageNumber.ToString(); } } // prev page if (CurrentPage > cGroupSize) { var previousPage = new TagBuilder("a"); previousPage.SetInnerText("..."); previousPage.AddCssClass("previous-dots"); var routingValues = new RouteValueDictionary(new { page = ((groupStart - cGroupSize).ToString()) }); previousPage.MergeAttribute("href", urlHelper.Action(actionName, routingValues)); divPrev.InnerHtml += previousPage.ToString(); } //prev if (CurrentPage > 1) { var previous = new TagBuilder("a"); previous.SetInnerText("السابق"); previous.AddCssClass("previous"); var routingValues = new RouteValueDictionary(new { page = (model.PageIndex - 1) }); previous.MergeAttribute("href", urlHelper.Action(actionName, routingValues)); divPrev.InnerHtml += previous.ToString(); } string output = divPrev.ToString(); return(new MvcHtmlString(output)); }