HTML.ActionLink vs Url.Action en ASP.NET rasoir

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

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

245
demandé sur Eitan K 2011-10-10 09:54:22

6 réponses

Oui, il y a une différence. Html.ActionLink génère une balise <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="/somecontroller/someaction/123">link text</a>

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

/somecontroller/someaction/123

Il y a aussi Html.Action {[17] } qui exécute une action de contrôleur enfant.

416
répondu Darin Dimitrov 2011-10-10 05:56:19

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

Url.Action génère uniquement une url.

Par exemple:

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

Génère:

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

Et

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

Génère:

/controllerName/actionName/<id>

Le meilleur point positif que j'aime utilise Url.Action(...)

Vous créez une balise d'ancrage par votre propre où vous pouvez définir votre propre texte lié facilement, 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>
35
répondu Pranav Labhe 2016-12-15 15:24:31
<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 faire une action, je dois le faire avec @Url.Action alors que si je veux juste un lien, je vais utiliser @ Html.ActionLink. Le point est quand vous devez utiliser un élément (HTML) avec l'url d'action est utilisée.

10
répondu Rohit Singh 2015-03-18 13:32:17

@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 par;

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

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

4
répondu Arsman Ahmad 2018-04-04 06:20:12

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

@Html.ActionLink("Save", "ActionMethod", "Controller", new { @class = "btn btn-primary" })
2
répondu Altair 2017-03-20 05:55:14

J'ai utilisé le code ci-dessous pour créer un bouton et cela a fonctionné pour moi.

<input type="button" value="PDF" onclick="location.href='@Url.Action("Export","tblOrder")'"/>
0
répondu Aneel Goplani 2016-04-29 20:19:48