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ó 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:
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>
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.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.
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>
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.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.
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.