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

C’è qualche differenza tra HTML.ActionLink e Url.Action o sono solo due modi per fare la stessa cosa?

Quando dovrei preferire uno rispetto all’altro?

Sì, c’è differenza. Html.ActionLink genera un tag mentre Url.Action restituisce solo un URL.

Per esempio:

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

genera:

 link text 

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

 https://stackoverflow.com/somecontroller/someaction/123 

Esiste anche Html.Action che esegue un’azione del controller figlio.

Html.ActionLink genera automaticamente un tag .

Url.Action genera solo un URL.

Per esempio:

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

genera:

 link text 

e

 https://stackoverflow.com/questions/7709001/html-actionlink-vs-url-action-in-asp-net-razor/@Url.Action("actionName", "controllerName", new { id = "" }) 

genera:

 https://stackoverflow.com/controllerName/actionName/ 

Il miglior punto a favore che mi piace è usare Url.Action(https://stackoverflow.com/questions/7709001/html-actionlink-vs-url-action-in-asp-net-razor/...)

Stai creando tag di ancoraggio da soli dove puoi impostare facilmente il tuo testo collegato anche con qualche altro tag html.

  ;height: /> @Html.DisplayFor(model => model.)  
 

@Html.ActionLink("Create New", "Create")

@using (Html.BeginForm("Index", "Company", FormMethod.Get)) {

Find by Name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)

}

Nell’esempio sopra puoi vedere che se ho 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’azione che url viene usata.

@HTML.ActionLink genera un HTML anchor tag . Mentre @Url.Action genera un URL per te. Puoi facilmente capirlo da;

 // 1. Item Definition @HTML.ActionLink("Item Definition", "ActionMethod", "ControllerName") // 2. https://stackoverflow.com/ControllerName/ActionMethod https://stackoverflow.com/questions/7709001/html-actionlink-vs-url-action-in-asp-net-razor/@Url.Action("ActionMethod", "ControllerName") // 3. Item Definition  Item Definition 

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

Puoi facilmente presentare Html.ActionLink come un 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.