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?
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?
Réponses:
Oui, il y a une différence. Html.ActionLink
génère une <a href=".."></a>
balise alors qu'elle 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 existe également Html.Action qui exécute une action de contrôleur enfant.
<a>
). Utilisez Url.Action lorsque vous devez générer uniquement une URL (cela peut également être utilisé dans une action de contrôleur).
Url.Action
est beaucoup plus performant que Html.ActionLink
. J'avais une liste de 6 000 articles qui en avaient 2 Html.ActionLinks
. Il a fallu 6 600 ms pour rendre la liste. Sans l' Html.ActionLinks
il a fallu 52ms. Url.Action
Son utilisation a pris 270 ms. Certes, 6000 articles sont une grande liste, mais j'ai pensé l'ajouter pour référence future.
Html.ActionLink
génère une <a href=".."></a>
balise automatiquement.
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 d'utiliser 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 juste un lien, j'utiliserai @ Html.ActionLink. Le point est quand vous devez utiliser un élément (HTML) avec une action URL est utilisée.
@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="https://stackoverflow.com/ControllerName/ActionMethod">Item Definition</a>
@HTML.ActionLink("Item Definition", "ActionMethod", "ControllerName")
// 2. /ControllerName/ActionMethod
@Url.Action("ActionMethod", "ControllerName")
// 3. <a href="https://stackoverflow.com/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.
Vous pouvez facilement présenter Html.ActionLink sous la forme d'un bouton en utilisant le style CSS approprié. Par exemple:
@Html.ActionLink("Save", "ActionMethod", "Controller", new { @class = "btn btn-primary" })
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")'"/>
Html.ActionLink
pour les générer. N'essayez pas de faire de telles micro-optimisations. Vous vous retrouverez avec du code laid dans vos vues.