HTML.ActionLink vs Url.Action в ASP.NET Razor

Есть ли разница между HTML.ActionLink vs Url.Action или это всего лишь два способа сделать одно и то же?

Когда я должен выбирать один за другим?

Ответ 1

Да, есть разница. 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, который выполняет действие дочернего контроллера.

Ответ 2

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>

Ответ 3

<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-адреса действия.

Ответ 4

Вы можете легко представить Html.ActionLink как кнопку, используя соответствующий стиль CSS. Например:

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

Ответ 5

Я использовал код ниже для создания кнопки, и это сработало для меня.

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