ฉันได้สร้างวิธีตัวช่วย HTML แบบหยาบโดยมีจุดประสงค์เพื่อสร้างลิงก์แบ่งหน้าสองลิงก์ (ถัดไปและก่อนหน้า)
ด้านล่างนี้เป็นรหัสสำหรับ ViewModel (DTO) ที่ถูกส่งผ่านไปยังวิธีตัวช่วยเหลือ:
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:
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());
}
ดูเหมือนว่าการรวมกันของโค้ดข้างต้นจะใช้งานได้ แต่เฉพาะจากหน้าแรกเท่านั้น ถ้าฉันคลิกลิงก์ก่อนหน้า [ 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 และสิ่งที่ วิธีที่ดีที่สุดที่จะทำคือ