Biasanya dalam tampilan ASP.NET orang dapat menggunakan fungsi berikut untuk mendapatkan URL (bukan an <a>
):
Url.Action("Action", "Controller");
Namun, saya tidak dapat menemukan cara melakukannya dari pembantu HTML khusus. saya sudah
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
}
}
Variabel pembantu memiliki metode Tindakan dan GenerateLink, tetapi mereka menghasilkan <a>
. Saya melakukan beberapa penggalian dalam kode sumber ASP.NET MVC, tetapi saya tidak dapat menemukan cara yang mudah.
Masalahnya adalah bahwa Url di atas adalah anggota kelas tampilan dan untuk instantiasinya diperlukan beberapa konteks dan peta rute (yang saya tidak ingin berurusan dengan dan saya tidak seharusnya melakukannya). Atau, turunan dari kelas HtmlHelper juga memiliki beberapa konteks yang saya anggap sebagai perjamuan subset dari informasi konteks dari instance Url (tapi sekali lagi saya tidak ingin berurusan dengan itu).
Singkatnya, saya pikir itu mungkin tetapi karena semua cara saya bisa melihat, melibatkan beberapa manipulasi dengan beberapa hal ASP.NET internal yang kurang lebih, saya bertanya-tanya apakah ada cara yang lebih baik.
Sunting: Misalnya, satu kemungkinan yang saya lihat adalah:
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
UrlHelper urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
urlHelper.Action("Action", "Controller");
}
}
Tapi sepertinya itu tidak benar. Saya tidak ingin berurusan dengan contoh UrlHelper sendiri. Pasti ada cara yang lebih mudah.
sumber
Jawaban:
Anda dapat membuat url helper seperti ini di dalam metode ekstensi helper html:
sumber
new UrlHelper(htmlHelper.ViewContext.RequestContext, htmlHelper.RouteCollection)
Anda juga bisa mendapatkan tautan menggunakan
UrlHelper
kelas publik dan statis:Dalam contoh ini Anda tidak perlu membuat kelas UrlHelper baru apa yang bisa menjadi sedikit keuntungan.
sumber
Berikut ini adalah metode
UrlHelper
pengembangan kecil saya untuk mendapatkanHtmlHelper
contoh:Gunakan sebagai:
(Saya memposting ans ini hanya untuk referensi)
sumber