C'è qualche differenza tra HTML.ActionLink
rispetto a Url.Action
o sono solo due modi di fare la stessa cosa?HTML.ActionLink vs Url.Action in ASP.NET Razor
Quando preferire uno rispetto all'altro?
C'è qualche differenza tra HTML.ActionLink
rispetto a Url.Action
o sono solo due modi di fare la stessa cosa?HTML.ActionLink vs Url.Action in ASP.NET Razor
Quando preferire uno rispetto all'altro?
Sì, c'è una differenza. Html.ActionLink
genera un tag <a href=".."></a>
mentre Url.Action
restituisce solo un URL.
Ad 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 bambino.
<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 di cui sopra si può vedere che se ho bisogno di un particolare 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'azione che url è usata.
Html.ActionLink
genera automaticamente un tag <a href=".."></a>
.
Url.Action
genera solo un URL.
Ad 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 positivo che mi piace è utilizzare Url.Action(...)
Si sta creando un tag di ancoraggio da soli in cui è possibile impostare il proprio testo collegato facilmente 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>
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")'"/>
Si può facilmente presenti Html.ActionLink come pulsante utilizzando lo stile CSS appropriata. Per esempio:
@Html.ActionLink("Save", "ActionMethod", "Controller", new { @class = "btn btn-primary" })
Questo non sembra rispondere alla domanda originale su quale sia la differenza tra HTML.ActionLink e Url.Action. Forse dovresti usare un commento invece di una risposta. – Fencer04
hmm .... Quindi nel caso in cui ci sono centinaia di link in una pagina, quindi il Html.ActionLink potrebbe essere in ritardo dal momento che genera il codice HTML completo per un'ancora, giusto ?? –
@PankajUpadhyay, si dovrebbe sempre usare html o url helper quando si tratta di url in un'applicazione asp.net mvc.Anche se hai un centesimo di link, usa 'Html.ActionLink' per generarli. Non provare a fare tali micro ottimizzazioni. Finirai con un brutto codice nelle tue visualizzazioni. –
dat significa che preferisco Html.ActionLink() su Url.Action in tutte le situazioni durante il rendering di un collegamento. A proposito, allora perché il tutorial ufficiale di Microsoft (MVC Music Store) sul sito Web di asp.net usava Url.Azione la maggior parte delle volte ogni volta che era necessario un collegamento. –