โดยปกติในมุมมอง ASP.NET หนึ่งสามารถใช้ฟังก์ชั่นต่อไปนี้เพื่อรับ URL (ไม่ใช่<a>
):
Url.Action("Action", "Controller");
อย่างไรก็ตามฉันไม่สามารถหาวิธีทำได้จากตัวช่วย HTML ที่กำหนดเอง ฉันมี
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
}
}
ตัวแปรตัวช่วยมีเมธอด Action และ GenerateLink แต่สร้างขึ้น<a>
มา ฉันทำการขุดในซอร์สโค้ด ASP.NET MVC แต่ฉันไม่สามารถหาวิธีที่ตรงไปตรงมา
ปัญหาคือ Url ด้านบนเป็นสมาชิกของคลาสมุมมองและสำหรับอินสแตนซ์ของมันต้องการบริบทบางอย่างและแผนที่เส้นทาง (ซึ่งฉันไม่ต้องการที่จะจัดการกับและฉันไม่ควรจะอยู่แล้ว) หรืออีกทางหนึ่งอินสแตนซ์ของคลาส HtmlHelper ก็มีบริบทบางอย่างที่ฉันถือว่าเป็นส่วนหนึ่งของชุดย่อยของข้อมูลบริบทของอินสแตนซ์ Url (แต่ฉันไม่ต้องการจัดการกับมันอีก)
โดยสรุปฉันคิดว่ามันเป็นไปได้ แต่เนื่องจากฉันเห็นทุกอย่างเกี่ยวข้องกับการจัดการบางอย่างกับสิ่ง ASP.NET ภายในบางอย่างมากขึ้นฉันสงสัยว่ามีวิธีที่ดีกว่านี้หรือไม่
แก้ไข:ตัวอย่างเช่นความเป็นไปได้หนึ่งอย่างที่ฉันเห็นคือ:
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
UrlHelper urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
urlHelper.Action("Action", "Controller");
}
}
แต่มันดูไม่ถูกต้อง ฉันไม่ต้องการที่จะจัดการกับอินสแตนซ์ของ UrlHelper ด้วยตัวเอง จะต้องมีวิธีที่ง่ายกว่า