Я создал грубый метод HTML Helper с целью создания двух ссылок на страницы (Next и Previous).
Ниже приведен код для ViewModel (DTO), передаваемый в метод Helper:
public class PaginationVM
{
public int TotalItems { get; set; }
public int ItemsPerPage { get; set; }
public int CurrentPage { get; set; }
public int TotalPages
{
get { return (int)Math.Ceiling((decimal)TotalItems / ItemsPerPage); }
}
}
А вот код для HTML Helper Method:
public static MvcHtmlString Paginator(this HtmlHelper htmlHelper, PaginationVM pInfo)
{
StringBuilder result = new StringBuilder();
var nextPage = pInfo.CurrentPage + 1;
var prevPage = pInfo.CurrentPage - 1;
if (pInfo.CurrentPage < pInfo.TotalPages)
{
TagBuilder tagA = new TagBuilder("a");
tagA.MergeAttribute("href", "page/" + nextPage);
tagA.InnerHtml = "Prev";
tagA.AddCssClass("prev");
result.Append(tagA.ToString());
}
else
{
TagBuilder tagB = new TagBuilder("a");
tagB.MergeAttribute("href", "page/" + prevPage);
tagB.InnerHtml = "Next";
tagB.AddCssClass("next");
result.Append(tagB.ToString());
}
return MvcHtmlString.Create(result.ToString());
}
Кажется, что вышеприведенная комбинация кода работает, но только с домашней страницы, если я нажимаю ссылку Prev [localhost: xxxx / page / 2] и перейдите на страницу 2, затем ссылки станут [localhost: xxxx / page / page / 2].
Моя маршрутизация выглядит следующим образом
routes.MapRoute(
"PagingPosts/param", // Route name
"page/{pageId}", // /page/3
new { controller = "Home", action = "Index", pageId = UrlParameter.Optional }, // Parameter defaults
new { pageId = @"\d+" } // Constraints: pageId must be numerical
);
Как видите, страница слова теперь продублирована.Я могу придумать, как решить эту проблему, и сказать, что нужно создать ActionLink из корня и создать свой URL таким образом, но я не уверен, как это сделать в помощнике HTML, и чтолучший способ сделать это будет.
Любая помощь будет принята с благодарностью .
Спасибо.