293 votes

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

Y a-t-il une différence entre HTML.ActionLink vs Url.Action ou ce sont juste deux façons de faire la même chose ?

Quand dois-je préférer l'un à l'autre ?

491voto

Darin Dimitrov Points 528142

Oui, il y a une différence. Html.ActionLink génère un <a href=".."></a> alors que Url.Action ne renvoie qu'une url.

Par exemple :

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

génère :

<a href="http://stackoverflow.com/somecontroller/someaction/123">link text</a>

y Url.Action("someaction", "somecontroller", new { id = "123" }) génère :

/somecontroller/someaction/123

Il y a également Html.Action qui exécute une action de contrôleur enfant.

48voto

Pranav Labhe Points 51

Html.ActionLink génère un <a href=".."></a> automatiquement.

Url.Action ne génère qu'une url.

Par exemple :

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

génère :

<a href="http://stackoverflow.com/controllerName/actionName/<id>">link text</a>

y

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

génère :

/controllerName/actionName/<id>

Le meilleur point positif que j'apprécie est l'utilisation Url.Action(...)

Vous créez vous-même une balise d'ancrage qui vous permet de définir facilement votre propre texte lié, même avec une autre balise html.

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

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

   @Html.DisplayFor(model => model.<SomeModelField>)
</a>

13voto

Arsman Ahmad Points 982

@HTML.ActionLink génère un HTML anchor tag . Alors que @Url.Action génère un URL pour vous. Vous pouvez facilement le comprendre en ;

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

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

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

Ces deux approches sont différentes et dépendent totalement de vos besoins.

12voto

Rohit Singh Points 121
<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>
}

Dans l'exemple ci-dessus, vous pouvez voir que si j'ai spécifiquement besoin d'un bouton pour effectuer une action, je dois le faire avec @URL.Action alors que si je veux simplement un lien, j'utiliserai @Html.ActionLink. Le fait est que lorsque vous devez utiliser un élément (HTML) avec une action, on utilise url.

4voto

Altair Points 51

Vous pouvez facilement présenter Html.ActionLink comme un bouton en utilisant le style CSS approprié. Par exemple :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X