@{ var window = 7; // number of simultaneously displayed pages var nextText = HasText(Model.NextText) ? Model.NextText : T(">").Text; var previousText = HasText(Model.PreviousText) ? Model.PreviousText : T("<").Text; var routeData = new RouteValueDictionary(ViewContext.RouteData.Values); var queryString = ViewContext.HttpContext.Request.QueryString; if (queryString != null) { foreach (string key in queryString.Keys) { if (key != null && !routeData.ContainsKey(key)) { var value = queryString[key]; routeData[key] = queryString[key]; } } } if (routeData.ContainsKey("id") && !HasText(routeData["id"])) { routeData.Remove("id"); } var totalPageCount = (int) Math.Ceiling((double) Model.TotalItemCount / Model.PageSize); var firstPage = Math.Max(1, (int)Model.Page - (window/2)); var lastPage = Math.Min(totalPageCount, (int)Model.Page + (window/2)); Model.Classes.Add("pager"); Model.Classes.Add("group"); var tag = Tag(Model, "ul"); } @if (Model.TotalItemCount > 1) { @T("Showing items {0} - {1} of {2}", (Model.Page-1)*(int)Model.PageSize + 1, Math.Min(Model.TotalItemCount, (Model.Page)*(int)Model.PageSize), Model.TotalItemCount) } @if (totalPageCount > 1) { @tag.StartElement // first if(firstPage > 1) { if (routeData.ContainsKey("page")) { routeData.Remove("page"); }
  • @Html.ActionLink(T("<<").Text, (string)routeData["action"], (string)routeData["controller"], routeData, null)
  • } // previous page if(Model.Page > 1) { if (Model.Page == 2 && routeData.ContainsKey("page")) { routeData.Remove("page"); } else { routeData["page"] = Model.Page - 1; }
  • @Html.ActionLink((string)previousText, (string)routeData["action"], (string)routeData["controller"], routeData, null)
  • } // page numbers for (var p = firstPage; p <= lastPage; p++) {
  • @if (p == Model.Page) { @p } else { if (p == 1) { routeData.Remove("page"); } else { routeData["page"] = p; } @Html.ActionLink(p.ToString(), (string)routeData["action"], (string)routeData["controller"], routeData, null) }
  • } // next page if(Model.Page < totalPageCount) { routeData["page"] = Model.Page + 1;
  • @Html.ActionLink((string)nextText, (string)routeData["action"], (string)routeData["controller"], routeData, null)
  • } // last page if(lastPage < totalPageCount) { routeData["page"] = totalPageCount;
  • @Html.ActionLink(T(">>").Text, (string)routeData["action"], (string)routeData["controller"], routeData, null)
  • } @tag.EndElement }