Для моего использования я нашел помощника, который делает что-то похожее на ваш запрос.Я использую некоторые другие переменные, но я думаю, что вы поняли идею и можете взять мой код и изменить его в соответствии с вашими потребностями
public static MvcHtmlString PageLinks(this HtmlHelper html, int totalItems, int itemsPerPage, int currentPage, Func<int, string> pageUrl)
{
return PageLinks(html, totalItems, itemsPerPage, currentPage, "", "", pageUrl);
}
public static MvcHtmlString PageLinks(this HtmlHelper html, int totalItems, int itemsPerPage, int currentPage, string cssClass, string cssClassSelectedPage, Func<int, string> pageUrl)
{
int totalPages = (int)Math.Ceiling((decimal)totalItems / itemsPerPage);
StringBuilder result = new StringBuilder();
for (int i = 1; i <= totalPages; i++)
{
string css = cssClass;
TagBuilder tag = new TagBuilder("a");
tag.MergeAttribute("href", pageUrl(i));
tag.InnerHtml = i.ToString();
if (i == currentPage)
css += " " + cssClassSelectedPage;
if (!String.IsNullOrEmpty(cssClass))
tag.AddCssClass(css);
result.AppendLine(tag.ToString());
}
return MvcHtmlString.Create(result.ToString());
}
Затем из представления вы совершаете такой вызов:
@Html.PageLinks(Model.TotalItems, Model.PageSize, Model.Page, "page_link", "active_page", x => Url.Action("MyList", "Home", new { page = x }))%>
По сути, я передаю функцию с правилом маршрутизации для генерации всех ссылок
Это мое правило в Global.asax
routes.MapRoute("", "MyList/{page}", new { controller = "Home", action = "MyList", page = 0 }, new { page = @"\d+" });
Надеюсь, это поможет вам выполнить вашу задачу