Apakah ada perbedaan antara HTML.ActionLink
vs Url.Action
atau mereka hanya dua cara melakukan hal yang sama?
Kapan saya harus lebih suka yang satu daripada yang lain?
Apakah ada perbedaan antara HTML.ActionLink
vs Url.Action
atau mereka hanya dua cara melakukan hal yang sama?
Kapan saya harus lebih suka yang satu daripada yang lain?
Jawaban:
Ya, ada perbedaan. Html.ActionLink
menghasilkan <a href=".."></a>
tag sedangkan Url.Action
hanya mengembalikan url.
Sebagai contoh:
@Html.ActionLink("link text", "someaction", "somecontroller", new { id = "123" }, null)
menghasilkan:
<a href="/somecontroller/someaction/123">link text</a>
dan Url.Action("someaction", "somecontroller", new { id = "123" })
menghasilkan:
/somecontroller/someaction/123
Ada juga Html.Action yang mengeksekusi aksi pengontrol anak.
<a>
). Gunakan Url.Action saat Anda hanya perlu membuat url (ini juga bisa digunakan dalam tindakan pengontrol).
Url.Action
jauh lebih performat daripada Html.ActionLink
. Saya memiliki daftar 6.000 item yang memiliki 2 Html.ActionLinks
. Butuh 6.600 m untuk membuat daftar. Tanpa Html.ActionLinks
itu butuh 52 ms. Menggunakannya Url.Action
membutuhkan 270ms. Memang, 6000 item adalah daftar besar, tetapi saya pikir saya akan menambahkannya untuk referensi di masa mendatang.
Html.ActionLink
membuat <a href=".."></a>
tag secara otomatis.
Url.Action
hanya menghasilkan url.
Sebagai contoh:
@Html.ActionLink("link text", "actionName", "controllerName", new { id = "<id>" }, null)
menghasilkan:
<a href="/controllerName/actionName/<id>">link text</a>
dan
@Url.Action("actionName", "controllerName", new { id = "<id>" })
menghasilkan:
/controllerName/actionName/<id>
Poin plus terbaik yang saya suka gunakan Url.Action(...)
Anda membuat tag jangkar oleh Anda sendiri di mana Anda dapat mengatur teks tertaut Anda sendiri dengan mudah bahkan dengan beberapa tag html lainnya.
<a href="@Url.Action("actionName", "controllerName", new { id = "<id>" })">
<img src="<ImageUrl>" style"width:<somewidth>;height:<someheight> />
@Html.DisplayFor(model => model.<SomeModelField>)
</a>
<p>
@Html.ActionLink("Create New", "Create")
</p>
@using (Html.BeginForm("Index", "Company", FormMethod.Get))
{
<p>
Find by Name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
<input type="submit" value="Search" />
<input type="button" value="Clear" onclick="location.href='@Url.Action("Index","Company")'"/>
</p>
}
Dalam contoh di atas Anda dapat melihat bahwa Jika saya secara khusus memerlukan tombol untuk melakukan beberapa tindakan, saya harus melakukannya dengan @ Url.Action sedangkan jika saya hanya ingin tautan saya akan menggunakan @ Html.ActionLink. Intinya adalah ketika Anda harus menggunakan beberapa elemen (HTML) dengan url tindakan yang digunakan.
@HTML.ActionLink
menghasilkan a HTML anchor tag
. Sementara @Url.Action
menghasilkan URL
untuk Anda. Anda dapat dengan mudah memahaminya dengan;
// 1. <a href="https://stackoverflow.com/ControllerName/ActionMethod">Item Definition</a>
@HTML.ActionLink("Item Definition", "ActionMethod", "ControllerName")
// 2. /ControllerName/ActionMethod
@Url.Action("ActionMethod", "ControllerName")
// 3. <a href="https://stackoverflow.com/ControllerName/ActionMethod">Item Definition</a>
<a href="@Url.Action("ActionMethod", "ControllerName")"> Item Definition</a>
Kedua pendekatan ini berbeda dan sangat tergantung pada kebutuhan Anda.
Anda dapat dengan mudah menyajikan Html.ActionLink sebagai tombol dengan menggunakan gaya CSS yang sesuai. Sebagai contoh:
@Html.ActionLink("Save", "ActionMethod", "Controller", new { @class = "btn btn-primary" })
Saya menggunakan kode di bawah ini untuk membuat Tombol dan itu berhasil untuk saya.
<input type="button" value="PDF" onclick="location.href='@Url.Action("Export","tblOrder")'"/>
Html.ActionLink
untuk membuatnya. Jangan mencoba melakukan optimasi mikro semacam itu. Anda akan berakhir dengan kode jelek di tampilan Anda.