asp.net-mvc @html.actionlink - HTML.ActionLink vs Url.Action en ASP.NET Razor




example parameters (6)

¿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?


Answers

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.


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" })

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


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.


Para la biblioteca

@using MyNamespace

Para modelo

@model MyModel




asp.net-mvc asp.net-mvc-3 razor