348 Stimmen

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

Gibt es einen Unterschied zwischen HTML.ActionLink gegen Url.Action oder handelt es sich nur um zwei Arten, dieselbe Sache zu tun?

Wann sollte ich das eine dem anderen vorziehen?

577voto

Darin Dimitrov Punkte 990883

Ja, es gibt einen Unterschied. Html.ActionLink erzeugt eine <a href=".."></a> Tag in der Erwägung, dass Url.Action gibt nur eine Url zurück.

Zum Beispiel:

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

erzeugt:

<a href="http://stackoverflow.com/somecontroller/someaction/123">link text</a>

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

/somecontroller/someaction/123

Außerdem gibt es Html.Action die eine untergeordnete Controller-Aktion ausführt.

50voto

Pranav Labhe Punkte 1813

Html.ActionLink erzeugt eine <a href=".."></a> Tag automatisch.

Url.Action erzeugt nur eine Url.

Zum Beispiel:

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

erzeugt:

<a href="http://stackoverflow.com/controllerName/actionName/<id>">link text</a>

et

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

erzeugt:

/controllerName/actionName/<id>

Der beste Pluspunkt, der mir gefällt, ist die Verwendung von Url.Action(...)

Sie erstellen einen eigenen Anker-Tag, mit dem Sie Ihren eigenen verlinkten Text auch mit einem anderen HTML-Tag leicht setzen 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>

14voto

Arsman Ahmad Punkte 1615

@HTML.ActionLink erzeugt eine HTML anchor tag . Während @Url.Action erzeugt eine URL für Sie. Sie können es leicht verstehen, indem;

// 1. <a href="http://stackoverflow.com/ControllerName/ActionMethod">Item Definition</a>
@HTML.ActionLink("Item Definition", "ActionMethod", "ControllerName")

// 2. /ControllerName/ActionMethod
@Url.Action("ActionMethod", "ControllerName")

// 3. <a href="http://stackoverflow.com/ControllerName/ActionMethod">Item Definition</a>
<a href="@Url.Action("ActionMethod", "ControllerName")"> Item Definition</a>

Beide Ansätze sind unterschiedlich, und es kommt ganz auf Ihre Bedürfnisse an.

12voto

Rohit Singh Punkte 121
<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 sehen Sie, dass ich, wenn ich eine Schaltfläche für eine bestimmte Aktion benötige, @Url.Action verwenden muss, während ich, wenn ich nur einen Link haben möchte, @Html.ActionLink verwenden werde. Der Punkt ist, wenn Sie ein Element (HTML) mit Aktion verwenden müssen, wird url verwendet.

5voto

Altair Punkte 71

Sie können leicht präsentieren Html.ActionLink als Schaltfläche, indem Sie den entsprechenden CSS-Stil verwenden. Zum Beispiel:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X