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

¿Hay alguna diferencia entre HTML.ActionLink vs Url.Action o son solo dos formas de hacer lo mismo?

¿Cuándo debería preferir uno sobre el otro?

Sí, hay una diferencia. Html.ActionLink genera una etiqueta mientras que Url.Action devuelve solo una url.

Por ejemplo:

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

genera:

 link text 

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

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

También hay Html.Action que ejecuta una acción de controlador hijo.

Html.ActionLink genera una etiqueta automáticamente.

Url.Action genera solo una url.

Por ejemplo:

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

genera:

 link text 

y

 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/ 

El mejor punto que me gusta es usar Url.Action(https://stackoverflow.com/questions/7709001/html-actionlink-vs-url-action-in-asp-net-razor/...)

Está creando una etiqueta ancla por su cuenta, donde puede establecer fácilmente su propio texto vinculado incluso con alguna otra etiqueta 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)

}

En el ejemplo anterior, puede ver que si específicamente necesito un botón para realizar alguna acción, tengo que hacerlo con @ Url.Action, mientras que si solo quiero un enlace, usaré @ Html.ActionLink. El punto es cuando tienes que usar algún elemento (HTML) con url de acción.

@HTML.ActionLink genera una HTML anchor tag . Mientras que @Url.Action genera una URL para ti. Puedes entenderlo fácilmente por;

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

Ambos enfoques son diferentes y depende totalmente de su necesidad.

Puede presentar Html.ActionLink fácilmente como un botón utilizando el estilo CSS apropiado. Por ejemplo:

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

Usé el siguiente código para crear un botón y funcionó para mí.