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

Je nejaký rozdiel medzi HTML.ActionLink a Url.Action alebo sú to len dva spôsoby, ako urobiť to isté?

Kedy by som mal uprednostniť jeden pred druhým?

Riešenie

Áno, je v tom rozdiel. Html.ActionLink generuje tag <a href=".."></a>, zatiaľ čo Url.Action vracia iba url.

Napríklad:

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

generuje:

<a href="/somecontroller/someaction/123">link text</a>

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

/somecontroller/someaction/123

Existuje aj Html.Action, ktorá vykoná akciu podriadeného kontroléra.

Komentáre (8)

Html.ActionLink automaticky generuje tag <a href=".."></a>.

Url.Action generuje iba url.

Napríklad:

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

generuje:

<a href="/controllerName/actionName/id">link text</a>

a

@Url.Action("actionName", "controllerName", new { id = "" }) 

generuje:

/controllerName/actionName/

Najlepším plusom, ktorý sa mi páči, je použitie Url.Action(...)

Vytvárate si vlastný anchor tag, kde si môžete jednoducho nastaviť vlastný odkazovaný text aj s nejakým iným html tagom.


<a href="@Url.Action("actionName", "controllerName", new { id = "id" })">
Komentáre (0)
<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>
}

V uvedenom príklade môžete vidieť, že ak potrebujem konkrétne tlačidlo na vykonanie nejakej akcie, musím to urobiť pomocou @Url.Action, zatiaľ čo ak chcem len odkaz, použijem @Html.ActionLink. Ide o to, že keď potrebujete použiť nejaký prvok(HTML) s akciou, použije sa url.

Komentáre (0)