Saya telah membangun metode Pembantu HTML kasar dengan tujuan membuat dua tautan penomoran halaman (Berikutnya dan Sebelumnya).
Di bawah ini adalah kode untuk ViewModel (DTO) yang diteruskan ke Metode 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); }
}
}
Dan berikut ini kode 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());
}
Kombinasi kode di atas sepertinya berfungsi, tetapi hanya dari beranda, jika saya klik tautan Sebelumnya [ localhost:xxxx/page/2 ], dan masuk ke halaman 2, maka tautannya menjadi [ localhost:xxxx/page/page/ 2 ].
Perutean saya terlihat sebagai berikut
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
);
Seperti yang Anda lihat, halaman kata sekarang diduplikasi. Saya dapat memikirkan cara untuk memperbaiki masalah ini, dan itu adalah dengan memerintahkannya untuk menghasilkan ActionLink dari root, dan membuat URL saya seperti itu, tapi saya tidak yakin bagaimana melakukannya di pembantu HTML, dan apa yang cara terbaik untuk melakukannya adalah.