it-swarm.com.de

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

Gibt es einen Unterschied zwischen HTML.ActionLink und Url.Action oder gibt es nur zwei Möglichkeiten, dasselbe zu tun?

Wann sollte ich eins dem anderen vorziehen?

276
Pankaj Upadhyay

Ja, da gibt es einen Unterschied. Html.ActionLink generiert ein <a href=".."></a> -Tag, während Url.Action nur eine URL zurückgibt.

Zum Beispiel:

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

erzeugt:

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

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

/somecontroller/someaction/123

Es gibt auch Html.Action , das eine untergeordnete Controller-Aktion ausführt.

466
Darin Dimitrov

Html.ActionLink generiert automatisch ein <a href=".."></a> Tag.

Url.Action generiert nur eine URL.

Zum Beispiel:

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

erzeugt:

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

und

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

erzeugt:

/controllerName/actionName/<id>

Der beste Pluspunkt, den ich mag, ist die Verwendung von Url.Action(...)

Sie erstellen selbst ein Ankertag, mit dem Sie selbst mit einem anderen HTML-Tag problemlos Ihren eigenen verknüpften Text festlegen können.

<a href="@Url.Action("actionName", "controllerName", new { id = "<id>" })">

   <img src="<ImageUrl>" style"width:<somewidth>;height:<someheight> />

   @Html.DisplayFor(model => model.<SomeModelField>)
</a>
39
Pranav Labhe
<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>
}

Im obigen Beispiel können Sie sehen, dass ich, wenn ich speziell eine Schaltfläche für eine Aktion benötige, diese mit @ Url.Action ausführen muss. Wenn ich jedoch nur einen Link möchte, verwende ich @ Html.ActionLink. Der Punkt ist, wenn Sie ein Element (HTML) mit Aktions-URL verwenden müssen.

12
Rohit Singh

@HTML.ActionLink generiert einen HTML anchor tag. Während @Url.Action ein URL für Sie generiert. Sie können es leicht verstehen;

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

Beide Ansätze sind unterschiedlich und hängen ganz von Ihren Bedürfnissen ab.

9
Arsman Ahmad

Sie können Html.ActionLink mithilfe des entsprechenden CSS-Stils einfach als Schaltfläche darstellen. Zum Beispiel:

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

Ich habe den folgenden Code verwendet, um einen Button zu erstellen und es hat für mich funktioniert.

<input type="button" value="PDF" onclick="location.href='@Url.Action("Export","tblOrder")'"/>
0
Aneel Goplani