HTML.ActionLink vs Url.Action ใน ASP.NET Razor


304

มีความแตกต่างระหว่างHTML.ActionLinkvs Url.Actionหรือพวกเขาเป็นเพียงสองวิธีในการทำสิ่งเดียวกันหรือไม่?

เมื่อใดที่ฉันควรเลือกหนึ่งรายการมากกว่ารายการอื่น

คำตอบ:


508

ใช่มีความแตกต่าง Html.ActionLinkสร้าง<a href=".."></a>แท็กในขณะที่Url.Actionส่งกลับเฉพาะ URL

ตัวอย่างเช่น:

@Html.ActionLink("link text", "someaction", "somecontroller", new { id = "123" }, null)

สร้าง:

<a href="/somecontroller/someaction/123">link text</a>

และUrl.Action("someaction", "somecontroller", new { id = "123" })สร้าง:

/somecontroller/someaction/123

นอกจากนี้ยังมีHtml.Actionซึ่งเรียกใช้งานแอคชันลูกควบคุม


14
@PankajUpad คุณควรใช้ html หรือ url helpers เสมอเมื่อจัดการกับ url ในแอพพลิเคชั่น asp.net mvc แม้ว่าคุณจะมีลิงค์นับร้อยให้ใช้Html.ActionLinkเพื่อสร้างลิงก์ อย่าพยายามทำการเพิ่มประสิทธิภาพขนาดเล็กเช่นนั้น คุณจะจบลงด้วยรหัสที่น่าเกลียดในมุมมองของคุณ
ดารินทินดิมิทรอฟ

2
dat หมายความว่าฉันควรจะชอบ Html.ActionLink () มากกว่า Url.Action ในทุกสถานการณ์เมื่อแสดงผลลิงค์ที่เกี่ยวข้อง BTW แล้วเหตุใดการสอนอย่างเป็นทางการของ Microsoft (MVC Music Store) บนเว็บไซต์ asp.net จึงใช้ Url.Action เกือบทุกครั้งที่ต้องการลิงก์
Pankaj Upadhyay

7
@PankajUpad ใช่ให้ใช้ Html.ActionLink เมื่อคุณต้องการสร้างแท็กจุดยึด ( <a>) ใช้ Url.Action เมื่อคุณต้องการสร้างเฉพาะ url (ซึ่งสามารถใช้ในการดำเนินการควบคุม)
ดารินทินดิมิทรอฟ

3
@Shimmy คุณสามารถอ่านได้ที่นี่: haacked.com/archive/2009/11/17/aspnetmvc2-render-action.aspx
Darin Dimitrov

3
ฉันรู้ว่านี่เป็นโพสต์เก่า แต่สิ่งที่เรียนรู้จากประสบการณ์ Url.Actionเป็น performat Html.ActionLinkมากกว่า ผมมีรายการ 6,000 รายการที่มี Html.ActionLinks2 ใช้เวลา 6,600 มิลลิวินาทีในการแสดงรายการ โดยไม่ต้องHtml.ActionLinksใช้เวลา 52ms ใช้Url.Actionมันใช้เวลา 270ms ได้รับแล้ว 6,000 รายการเป็นรายการที่มีขนาดใหญ่ แต่คิดว่าฉันจะเพิ่มไว้เพื่อใช้อ้างอิงในอนาคต
roberocity

42

Html.ActionLinkสร้าง<a href=".."></a>แท็กโดยอัตโนมัติ

Url.Action สร้าง URL เท่านั้น

ตัวอย่างเช่น:

@Html.ActionLink("link text", "actionName", "controllerName", new { id = "<id>" }, null)

สร้าง:

<a href="/controllerName/actionName/<id>">link text</a>

และ

@Url.Action("actionName", "controllerName", new { id = "<id>" }) 

สร้าง:

/controllerName/actionName/<id>

จุดบวกที่ดีที่สุดที่ฉันชอบคือการใช้ Url.Action(...)

คุณกำลังสร้างแท็กสมอด้วยของคุณเองซึ่งคุณสามารถตั้งค่าข้อความที่เชื่อมโยงของคุณได้อย่างง่ายดายแม้จะมีแท็ก html อื่น ๆ

<a href="@Url.Action("actionName", "controllerName", new { id = "<id>" })">

   <img src="<ImageUrl>" style"width:<somewidth>;height:<someheight> />

   @Html.DisplayFor(model => model.<SomeModelField>)
</a>

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>
}

ในตัวอย่างด้านบนคุณจะเห็นว่าหากฉันต้องการปุ่มเฉพาะเพื่อดำเนินการบางอย่างฉันต้องทำกับ @ Url.Action ในขณะที่ถ้าฉันต้องการลิงค์ฉันจะใช้ @ Html.ActionLink จุดคือเมื่อคุณต้องใช้องค์ประกอบบางอย่าง (HTML) กับ URL การกระทำที่ใช้


10

@HTML.ActionLinkHTML anchor tagสร้าง ในขณะที่@Url.Actionสร้างURLสำหรับคุณ คุณสามารถเข้าใจได้โดยง่าย;

// 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>

วิธีการทั้งสองนี้แตกต่างกันไปและขึ้นอยู่กับความต้องการของคุณ


2

คุณสามารถนำเสนอHtml.ActionLinkเป็นปุ่มได้อย่างง่ายดายโดยใช้สไตล์ CSS ที่เหมาะสม ตัวอย่างเช่น:

@Html.ActionLink("Save", "ActionMethod", "Controller", new { @class = "btn btn-primary" })

5
สิ่งนี้ดูเหมือนจะไม่ตอบคำถามต้นฉบับว่า HTML.ActionLink กับ Url.Action แตกต่างกันอย่างไร บางทีคุณควรใช้ความคิดเห็นแทนคำตอบ
Fencer04

คำตอบของคุณไม่สนุกกับการค้นหาดั้งเดิม
Arsman Ahmad

0

ฉันใช้รหัสด้านล่างเพื่อสร้างปุ่มและใช้งานได้สำหรับฉัน

<input type="button" value="PDF" onclick="location.href='@Url.Action("Export","tblOrder")'"/>

1
ฉันคิดว่าคุณต้องอ่านคำถามอีกครั้ง @Pankaj Upadhyay กำลังถามสิ่งที่แตกต่างกัน
Arsman Ahmad
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.