Есть ли разница между 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, который выполняет действие дочернего контроллера.
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(...)
Вы создаете тэг anchor своим собственным, где вы можете легко установить свой собственный связанный текст даже с помощью другого тега 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 как кнопку, используя соответствующий стиль CSS. Например:
@Html.ActionLink("Save", "ActionMethod", "Controller", new { @class = "btn btn-primary" })
Я использовал код ниже для создания кнопки, и это сработало для меня.
<input type="button" value="PDF" onclick="location.href='@Url.Action("Export","tblOrder")'"/>