public static IHtmlContent Pager(this IHtmlHelper htmlHelper, IPagedList pagedList, PagerOptions pagerOptions) { var tagBuilder = new TagBuilder(pagerOptions.TagName); tagBuilder.MergeAttribute("id", pagerOptions.Id); tagBuilder.AddCssClass(pagerOptions.CssClass); if (!pagerOptions.NoPageHide || pagedList.MaxPageIndex != 1) { IUrlHelper urlHelper = new UrlHelperFactory().GetUrlHelper(htmlHelper.ViewContext); var dictionary = new Dictionary <String, object>(); foreach (var keypair in htmlHelper.ViewContext.HttpContext.Request.Query) { dictionary.Add(keypair.Key, keypair.Value); } if (dictionary.ContainsKey(pagerOptions.PageIndexParameterName)) { dictionary[pagerOptions.PageIndexParameterName] = 1; } else { dictionary.Add(pagerOptions.PageIndexParameterName, (int)1); } if (pagedList.CurrentPageIndex > 1) { var itemPageUrl = urlHelper.Link(pagerOptions.RouteName, dictionary); AddPageItem(tagBuilder, Constants.DEFAULT_PAGE_TEXT_TEMPLATE, itemPageUrl, pagerOptions.FirstText); } int num = pagedList.CurrentPageIndex - 1; if (num > 1) { dictionary[pagerOptions.PageIndexParameterName] = num; AddPageItem(tagBuilder, Constants.DEFAULT_PAGE_TEXT_TEMPLATE, urlHelper.Link(pagerOptions.RouteName, dictionary), pagerOptions.PreText); } int minPageIndex = pagedList.CurrentPageIndex - Constants.PADDING_PAGE_NUM; if (minPageIndex < 1) { minPageIndex = 1; } int maxPageIndex = pagedList.CurrentPageIndex + 4; if (maxPageIndex > pagedList.MaxPageIndex) { maxPageIndex = pagedList.MaxPageIndex; } for (int i = minPageIndex; i <= maxPageIndex; i++) { var itemTemplate = pagerOptions.ItemTemplate; if (i == pagedList.CurrentPageIndex) { itemTemplate = pagerOptions.CurrentTemplate; } dictionary[pagerOptions.PageIndexParameterName] = i; AddPageItem(tagBuilder, itemTemplate, urlHelper.Link(pagerOptions.RouteName, dictionary), i); } int next = pagedList.CurrentPageIndex + 1; if (next < pagedList.MaxPageIndex) { dictionary[pagerOptions.PageIndexParameterName] = next; AddPageItem(tagBuilder, Constants.DEFAULT_PAGE_TEXT_TEMPLATE, urlHelper.Link(pagerOptions.RouteName, dictionary), pagerOptions.NextText); } if (pagedList.CurrentPageIndex < pagedList.MaxPageIndex) { dictionary[pagerOptions.PageIndexParameterName] = pagedList.MaxPageIndex; AddPageItem(tagBuilder, Constants.DEFAULT_PAGE_TEXT_TEMPLATE, urlHelper.Link(pagerOptions.RouteName, dictionary), pagerOptions.LastText); } } return(tagBuilder); }