Чи є різниця між HTML.ActionLink
vs Url.Action
або вони є лише двома способами зробити те саме?
Коли я повинен віддавати перевагу одному перед іншим?
Чи є різниця між HTML.ActionLink
vs Url.Action
або вони є лише двома способами зробити те саме?
Коли я повинен віддавати перевагу одному перед іншим?
Відповіді:
Так, є різниця. 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, який виконує дію контролера.
<a>
). Використовуйте Url.Action, коли вам потрібно генерувати лише URL-адресу (це також може бути використане в дії контролера).
Url.Action
набагато ефективніше, ніж Html.ActionLink
. У мене був список з 6000 предметів, у яких було 2 Html.ActionLinks
. Щоб переглянути список, було потрібно 6 600 мільйонів. Без Html.ActionLinks
цього пройшло 52мс. Використовуючи Url.Action
це зайняло 270 мс. Звичайно, 6000 предметів - це великий список, але я подумав, що я додам його для подальшого ознайомлення.
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>
<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-адресом дії.
@HTML.ActionLink
породжує a HTML 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>
Обидва ці підходи різні, і це повністю залежить від вашої потреби.
Ви можете легко представити Html.ActionLink як кнопку, використовуючи відповідний стиль CSS. Наприклад:
@Html.ActionLink("Save", "ActionMethod", "Controller", new { @class = "btn btn-primary" })
Я використовував код нижче, щоб створити кнопку, і він працював на мене.
<input type="button" value="PDF" onclick="location.href='@Url.Action("Export","tblOrder")'"/>
Html.ActionLink
для їх створення. Не намагайтеся робити такі мікрооптимізації. У вас виявиться некрасивий код у ваших поглядах.