it-swarm-pt.tech

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

Existe alguma diferença entre HTML.ActionLink vs Url.Action ou são apenas duas maneiras de fazer a mesma coisa?

Quando devo preferir um ao outro?

273
Pankaj Upadhyay

Sim, há uma diferença. Html.ActionLink gera uma tag <a href=".."></a>, enquanto Url.Action retorna apenas uma url.

Por exemplo:

@Html.ActionLink("link text", "someaction", "somecontroller", new { id = "123" }, null)

gera:

<a href="/somecontroller/someaction/123">link text</a>

e Url.Action("someaction", "somecontroller", new { id = "123" }) gera:

/somecontroller/someaction/123

Há também Html.Action que executa uma ação do controlador filho.

461
Darin Dimitrov

Html.ActionLink gera uma tag <a href=".."></a> automaticamente.

Url.Action gera apenas uma url.

Por exemplo:

@Html.ActionLink("link text", "actionName", "controllerName", new { id = "<id>" }, null)

gera:

<a href="/controllerName/actionName/<id>">link text</a>

e

@Url.Action("actionName", "controllerName", new { id = "<id>" }) 

gera:

/controllerName/actionName/<id>

O melhor ponto positivo que eu gosto é usar Url.Action(...)

Você está criando uma tag de âncora por conta própria, onde você pode definir seu próprio texto vinculado facilmente, mesmo com alguma outra tag html.

<a href="@Url.Action("actionName", "controllerName", new { id = "<id>" })">

   <img src="<ImageUrl>" style"width:<somewidth>;height:<someheight> />

   @Html.DisplayFor(model => model.<SomeModelField>)
</a>
39
Pranav Labhe
<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>
}

No exemplo acima, você pode ver que, se eu preciso especificamente de um botão para fazer alguma ação, eu tenho que fazê-lo com @ Url.Action Considerando que, se eu quiser apenas um link, vou usar @ Html.ActionLink. O ponto é quando você tem que usar algum elemento (HTML) com url de ação é usado.

11
Rohit Singh

@HTML.ActionLink gera um HTML anchor tag. Enquanto @Url.Action gera um URL para você. Você pode entender isso facilmente;

// 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>

Ambas as abordagens são diferentes e dependem totalmente de sua necessidade.

9
Arsman Ahmad

Você pode facilmente apresentar Html.ActionLink como um botão usando o estilo CSS apropriado. Por exemplo:

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

Eu usei o código abaixo para criar um botão e funcionou para mim.

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