HTML.ActionLink vs Url.Action di ASP.NET Razor

304

Apakah ada perbedaan antara HTML.ActionLinkvs Url.Actionatau mereka hanya dua cara melakukan hal yang sama?

Kapan saya harus lebih suka yang satu daripada yang lain?

Pankaj Upadhyay
sumber

Jawaban:

508

Ya, ada perbedaan. Html.ActionLinkmenghasilkan <a href=".."></a>tag sedangkan Url.Actionhanya 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.

Darin Dimitrov
sumber
14
@ PankajUpadhyay, Anda harus selalu menggunakan bantuan html atau url saat berurusan dengan url dalam aplikasi asp.net mvc. Bahkan jika Anda memiliki ratusan tautan, gunakan Html.ActionLinkuntuk membuatnya. Jangan mencoba melakukan optimasi mikro semacam itu. Anda akan berakhir dengan kode jelek di tampilan Anda.
Darin Dimitrov
2
dat berarti saya harus memilih Html.ActionLink () daripada Url.Action dalam semua situasi saat merender tautan. BTW, lalu mengapa tutorial resmi Microsoft (MVC Music Store) di situs asp.net menggunakan Url.Action paling sering setiap kali tautan diperlukan.
Pankaj Upadhyay
7
@PankajUpadhyay, gunakan Html.ActionLink saat Anda perlu membuat anchor tag ( <a>). Gunakan Url.Action saat Anda hanya perlu membuat url (ini juga bisa digunakan dalam tindakan pengontrol).
Darin Dimitrov
3
@ Kimmy, Anda dapat membacanya di sini: haacked.com/archive/2009/11/17/aspnetmvc2-render-action.aspx
Darin Dimitrov
3
Saya tahu ini adalah pos lama, tetapi sesuatu yang dipelajari dari pengalaman. Url.Actionjauh 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.ActionLinksitu butuh 52 ms. Menggunakannya Url.Actionmembutuhkan 270ms. Memang, 6000 item adalah daftar besar, tetapi saya pikir saya akan menambahkannya untuk referensi di masa mendatang.
roberocity
42

Html.ActionLinkmembuat <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>
Pranav Labhe
sumber
12
<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.

Rohit Singh
sumber
10

@HTML.ActionLinkmenghasilkan a HTML anchor tag. Sementara @Url.Actionmenghasilkan URLuntuk 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.

Arsman Ahmad
sumber
2

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" })
Altair
sumber
5
Tampaknya ini tidak menjawab pertanyaan awal tentang apa perbedaan antara HTML.ActionLink vs Url.Action. Mungkin Anda harus menggunakan komentar alih-alih jawaban.
Fencer04
Jawaban Anda tidak menghibur permintaan asli.
Arsman Ahmad
0

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")'"/>
Aneel Goplani
sumber
1
Saya pikir, Anda harus membaca pertanyaan itu lagi. @Pankaj Upadhyay menanyakan hal yang sama sekali berbeda.
Arsman Ahmad