HTML.ActionLink vs Url.Action trong ASP.NET Dao cạo


304

Có sự khác biệt nào giữa HTML.ActionLinkvs Url.Actionhoặc chúng chỉ là hai cách để làm điều tương tự?

Khi nào tôi nên thích cái này hơn cái kia?

Câu trả lời:


508

Có một sự khác biệt. Html.ActionLinktạo một <a href=".."></a>thẻ trong khi Url.Actionchỉ trả về một url.

Ví dụ:

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

tạo ra:

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

Url.Action("someaction", "somecontroller", new { id = "123" })tạo:

/somecontroller/someaction/123

Ngoài ra còn có Html.Action thực thi một hành động điều khiển con.


14
@PankajUpadhyay, bạn nên luôn luôn sử dụng trình trợ giúp html hoặc url khi xử lý các url trong ứng dụng asp.net mvc. Ngay cả khi bạn có hàng trăm liên kết, hãy sử dụng Html.ActionLinkđể tạo chúng. Đừng cố gắng tối ưu hóa vi mô như vậy. Bạn sẽ kết thúc với mã xấu xí trong quan điểm của bạn.
Darin Dimitrov

2
dat có nghĩa là tôi nên thích Html.ActionLink () hơn Url.Action trong mọi tình huống khi kết xuất một liên kết có liên quan. BTW, vậy thì tại sao Microsoft lại hướng dẫn chính thức (MVC Music Store) trên trang web asp.net sử dụng Url.Action nhiều lần bất cứ khi nào cần một liên kết.
Pankaj Upadhyay

7
@PankajUpadhyay, sử dụng Html.ActionLink khi bạn cần tạo thẻ neo ( <a>). Sử dụng Url.Action khi bạn chỉ cần tạo một url (điều này cũng có thể được sử dụng trong hành động của bộ điều khiển).
Darin Dimitrov

3
@Shimmy, bạn có thể đọc về nó ở đây: haacked.com/archive/2009/11/17/aspnetmvc2-render-action.aspx
Darin Dimitrov

3
Tôi biết đây là một bài viết cũ, nhưng một cái gì đó học được từ kinh nghiệm. Url.Actionlà hiệu suất nhiều hơn nhiều Html.ActionLink. Tôi đã có một danh sách 6.000 mặt hàng có 2 Html.ActionLinks. Phải mất 6.600ms để hiển thị danh sách. Không có Html.ActionLinksnó mất 52ms. Sử dụng Url.Actionnó mất 270ms. Cấp, 6000 mặt hàng là một danh sách lớn, nhưng tôi nghĩ tôi nên thêm nó để tham khảo trong tương lai.
tốc độ

42

Html.ActionLinktạo một <a href=".."></a>thẻ tự động.

Url.Action chỉ tạo một url.

Ví dụ:

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

tạo ra:

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

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

tạo ra:

/controllerName/actionName/<id>

Điểm cộng tốt nhất mà tôi thích là sử dụng Url.Action(...)

Bạn đang tự tạo thẻ neo, nơi bạn có thể dễ dàng đặt văn bản được liên kết của riêng mình ngay cả với một số thẻ html khác.

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

Trong ví dụ trên bạn có thể thấy rằng nếu tôi đặc biệt cần một nút để thực hiện một số hành động, tôi phải thực hiện với @ Url.Action trong khi nếu tôi chỉ muốn một liên kết tôi sẽ sử dụng @ Html.ActionLink. Vấn đề là khi bạn phải sử dụng một số yếu tố (HTML) với url hành động được sử dụng.


10

@HTML.ActionLinktạo ra a HTML anchor tag. Trong khi @Url.Actiontạo ra một URLcho bạn. Bạn có thể dễ dàng hiểu nó bằng cách;

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

Cả hai cách tiếp cận này đều khác nhau và nó hoàn toàn phụ thuộc vào nhu cầu của bạn.


2

Bạn có thể dễ dàng trình bày Html.ActionLink dưới dạng nút bằng cách sử dụng kiểu CSS thích hợp. Ví dụ:

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

5
Điều này dường như không trả lời cho câu hỏi ban đầu về sự khác biệt giữa HTML.ActionLink so với Url.Action là gì. Có lẽ bạn nên sử dụng một bình luận thay vì một câu trả lời.
Fencer04

Câu trả lời của bạn không giải trí cho truy vấn ban đầu.
Arsman Ahmad

0

Tôi đã sử dụng mã dưới đây để tạo một Nút và nó hoạt động với tôi.

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

1
Tôi nghĩ rằng, bạn phải đọc câu hỏi một lần nữa. @Pankaj Upadhyay đang hỏi điều hoàn toàn khác.
Arsman Ahmad
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.