Y a-t-il une différence entre HTML.ActionLink
et URL.Action
ou s'agit-il simplement de deux façons de faire la même chose ?
Quand dois-je préférer l'une à l'autre ?
Oui, il y a une différence. Html.ActionLink
génère une balise <a href=" ;.."></a>
alors que Url.Action
ne retourne 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 existe également [Html.Action][1] qui exécute une action de contrôleur enfant.
[1] : http://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx
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 est l'utilisation de Url.Action(...)
.
Vous créez une balise d'ancrage par vous-même 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>
<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.