Có sự khác biệt nào giữa HTML.ActionLink
vs Url.Action
hoặ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ó sự khác biệt nào giữa HTML.ActionLink
vs Url.Action
hoặ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:
Có một sự khác biệt. Html.ActionLink
tạo một <a href=".."></a>
thẻ trong khi Url.Action
chỉ 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>
và 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.
<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).
Url.Action
là 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.ActionLinks
nó mất 52ms. Sử dụng Url.Action
nó 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.
Html.ActionLink
tạ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>
và
@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>
<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.
@HTML.ActionLink
tạo ra a HTML anchor tag
. Trong khi @Url.Action
tạo ra một URL
cho 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.
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" })
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")'"/>
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.