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


Risposte:


508

Sì, c'è differenza. Html.ActionLinkgenera un <a href=".."></a>tag mentre Url.Actionrestituisce solo un URL.

Per esempio:

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

genera:

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

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

/somecontroller/someaction/123

C'è anche Html.Action che esegue un'azione del controller figlio.


14
@PankajUpadhyay, dovresti sempre usare gli helper html o url quando hai a che fare con url in un'applicazione asp.net mvc. Anche se hai centinaia di collegamenti, usa Html.ActionLinkper generarli. Non provare a fare tali micro ottimizzazioni. Finirai con un brutto codice nelle tue opinioni.
Darin Dimitrov,

2
dat significa che dovrei preferire Html.ActionLink () rispetto a Url.Action in tutte le situazioni in cui è interessato il rendering di un collegamento. A proposito, allora perché il tutorial ufficiale di Microsoft (MVC Music Store) sul sito Web asp.net ha usato Url.Action più volte ogni volta che era necessario un collegamento.
Pankaj Upadhyay,

7
@PankajUpadhyay, usa Html.ActionLink quando devi generare un tag anchor ( <a>). Utilizzare Url.Action quando è necessario generare solo un URL (questo potrebbe essere utilizzato anche in un'azione del controller).
Darin Dimitrov,


3
So che questo è un vecchio post, ma qualcosa appreso dall'esperienza. Url.Actionè molto più performat di Html.ActionLink. Avevo un elenco di 6.000 articoli che ne contenevano 2 Html.ActionLinks. Ci sono voluti 6.600 ms per rendere l'elenco. Senza quello Html.ActionLinksci sono voluti 52ms. Il suo utilizzo Url.Actionha richiesto 270 ms. Concesso, 6000 articoli sono un grande elenco, ma ho pensato di aggiungerlo per riferimento futuro.
roberocity,

42

Html.ActionLinkgenera <a href=".."></a>automaticamente un tag.

Url.Action genera solo un url.

Per esempio:

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

genera:

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

e

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

genera:

/controllerName/actionName/<id>

Il miglior punto in più che mi piace sta usando Url.Action(...)

Stai creando tag di ancoraggio per conto tuo in cui puoi impostare facilmente il tuo testo collegato anche con qualche altro 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>

12
<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>
}

Nell'esempio sopra puoi vedere che se ho specificamente bisogno di un pulsante per fare qualche azione, devo farlo con @ Url.Action mentre se voglio solo un link userò @ Html.ActionLink. Il punto è quando devi usare qualche elemento (HTML) con l'URL di azione.


10

@HTML.ActionLinkgenera a HTML anchor tag. Mentre @Url.Actiongenera una URLper te. Puoi facilmente capirlo da;

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

Entrambi questi approcci sono diversi e dipende totalmente dalle tue necessità.


2

Puoi facilmente presentare Html.ActionLink come pulsante usando lo stile CSS appropriato. Per esempio:

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

5
Ciò non sembra rispondere alla domanda originale su quale sia la differenza tra HTML.ActionLink vs Url.Action. Forse dovresti usare un commento invece di una risposta.
Fencer04,

La tua risposta non è divertente per la query originale.
Arsman Ahmad,

0

Ho usato il codice qui sotto per creare un pulsante e ha funzionato per me.

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

1
Penso che devi leggere di nuovo la domanda. @Pankaj Upadhyay sta chiedendo una cosa completamente diversa.
Arsman Ahmad,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.