C'è qualche differenza tra HTML.ActionLinkvs Url.Actiono sono solo due modi di fare la stessa cosa?
Quando dovrei preferire l'uno all'altro?
C'è qualche differenza tra HTML.ActionLinkvs Url.Actiono sono solo due modi di fare la stessa cosa?
Quando dovrei preferire l'uno all'altro?
Risposte:
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.
<a>). Utilizzare Url.Action quando è necessario generare solo un URL (questo potrebbe essere utilizzato anche in un'azione del controller).
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.
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>
<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.
@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à.
Puoi facilmente presentare Html.ActionLink come pulsante usando lo stile CSS appropriato. Per esempio:
@Html.ActionLink("Save", "ActionMethod", "Controller", new { @class = "btn btn-primary" })
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")'"/>
Html.ActionLinkper generarli. Non provare a fare tali micro ottimizzazioni. Finirai con un brutto codice nelle tue opinioni.