asp.net mvc - example - HTML.ActionLink vs Url.Action en ASP.NET Razor
url action jquery (6)
Puede presentar fácilmente Html.ActionLink como un botón utilizando el estilo CSS apropiado. Por ejemplo:
@Html.ActionLink("Save", "ActionMethod", "Controller", new { @class = "btn btn-primary" })
¿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 <a href=".."></a>
mientras que Url.Action
solo devuelve una url.
Por ejemplo:
@Html.ActionLink("link text", "someaction", "somecontroller", new { id = "123" }, null)
genera:
<a href="/somecontroller/someaction/123">link text</a>
y Url.Action("someaction", "somecontroller", new { id = "123" })
genera:
/somecontroller/someaction/123
También hay Html.Action que ejecuta una acción de controlador secundario.
Utilicé el siguiente código para crear un botón y funcionó para mí.
<input type="button" value="PDF" onclick="location.href=''@Url.Action("Export","tblOrder")''"/>
@HTML.ActionLink
genera una HTML anchor tag
. Mientras que @Url.Action
genera una URL
para ti. Se puede entender fácilmente por;
// 1. <a href="/ControllerName/ActionMethod">Item Definition</a>
@HTML.ActionLink("Item Definition", "ActionMethod", "ControllerName")
// 2. /ControllerName/ActionMethod
@Url.Action("ActionMethod", "ControllerName")
// 3. <a href="/ControllerName/ActionMethod">Item Definition</a>
<a href="@Url.Action("ActionMethod", "ControllerName")"> Item Definition</a>
Ambos enfoques son diferentes y dependen totalmente de su necesidad.
Html.ActionLink
genera una etiqueta <a href=".."></a>
automáticamente.
Url.Action
genera solo una url.
Por ejemplo:
@Html.ActionLink("link text", "actionName", "controllerName", new { id = "<id>" }, null)
genera:
<a href="/controllerName/actionName/<id>">link text</a>
y
@Url.Action("actionName", "controllerName", new { id = "<id>" })
genera:
/controllerName/actionName/<id>
El mejor punto positivo que me gusta es usar Url.Action(...)
Usted está creando una etiqueta de anclaje por su cuenta, donde puede configurar su propio texto vinculado fácilmente incluso con alguna otra etiqueta 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>
}
En el ejemplo anterior, puedes ver que si necesito específicamente 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 acción url se utiliza.