HTML.ActionLink против Url.Action в ASP.NET Razor - PullRequest
275 голосов
/ 10 октября 2011

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

Когда мне следует отдавать предпочтение одному другому?

Ответы [ 6 ]

464 голосов
/ 10 октября 2011

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

39 голосов
/ 09 февраля 2015

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>
11 голосов
/ 23 ноября 2014
<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-адресом действия.

9 голосов
/ 04 апреля 2018

@HTML.ActionLink генерирует HTML anchor tag.В то время как @Url.Action генерирует URL для вас.Вы можете легко понять это следующим образом:

// 1. <a href="/ControllerName/ActionMethod">Item Definition</a>
@HTML.ActionLink("Item Definition", "ActionMethod", "ControllerName")

// 2. /ControllerName/ActionMethod
@Url.Action("ActionMethod", "ControllerName")

// 3. <a href="/ControllerName/ActionMethod">Item Definition</a>
<a href="@Url.Action("ActionMethod", "ControllerName")"> Item Definition</a>

Оба эти подхода различны, и это полностью зависит от ваших потребностей.

2 голосов
/ 19 августа 2016

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

@Html.ActionLink("Save", "ActionMethod", "Controller", new { @class = "btn btn-primary" })
0 голосов
/ 29 апреля 2016

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

<input type="button" value="PDF" onclick="location.href='@Url.Action("Export","tblOrder")'"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...