Gibt es einen Unterschied zwischen HTML.ActionLink
vs Url.Action
oder gibt es nur zwei Möglichkeiten, dasselbe zu tun?
Wann sollte ich eins dem anderen vorziehen?
Gibt es einen Unterschied zwischen HTML.ActionLink
vs Url.Action
oder gibt es nur zwei Möglichkeiten, dasselbe zu tun?
Wann sollte ich eins dem anderen vorziehen?
Antworten:
Ja, da gibt es einen Unterschied. Html.ActionLink
generiert ein <a href=".."></a>
Tag, während Url.Action
nur eine URL zurückgegeben wird.
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 , die eine untergeordnete Controller-Aktion ausführt.
<a>
) generieren müssen . Verwenden Sie Url.Action, wenn Sie nur eine URL generieren müssen (dies kann auch in einer Controller-Aktion verwendet werden).
Url.Action
ist viel leistungsfähiger als Html.ActionLink
. Ich hatte eine Liste von 6.000 Artikeln mit 2 Html.ActionLinks
. Das Rendern der Liste dauerte 6.600 ms. Ohne das Html.ActionLinks
dauerte es 52ms. Die Benutzung Url.Action
dauerte 270 ms. Zugegeben, 6000 Artikel sind eine große Liste, aber ich dachte, ich würde sie zum späteren Nachschlagen hinzufügen.
Html.ActionLink
generiert <a href=".."></a>
automatisch ein 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 Url.Action(...)
Sie erstellen selbst ein Ankertag, in dem Sie Ihren eigenen verknüpften Text auch mit einem anderen HTML-Tag problemlos 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>
<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 zum Ausführen einer Aktion benötige, diese mit @ Url.Action ausführen muss. Wenn ich nur einen Link möchte, verwende ich @ Html.ActionLink. Der Punkt ist, wenn Sie ein Element (HTML) verwenden müssen, wobei die Aktions-URL verwendet wird.
@HTML.ActionLink
erzeugt a HTML anchor tag
. Während @Url.Action
generiert ein URL
für Sie. Sie können es leicht verstehen, indem Sie;
// 1. <a href="https://stackoverflow.com/ControllerName/ActionMethod">Item Definition</a>
@HTML.ActionLink("Item Definition", "ActionMethod", "ControllerName")
// 2. /ControllerName/ActionMethod
@Url.Action("ActionMethod", "ControllerName")
// 3. <a href="https://stackoverflow.com/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.
Sie können Html.ActionLink einfach als Schaltfläche präsentieren, indem Sie den entsprechenden CSS-Stil verwenden. Zum Beispiel:
@Html.ActionLink("Save", "ActionMethod", "Controller", new { @class = "btn btn-primary" })
Ich habe den folgenden Code verwendet, um einen Button zu erstellen, und er hat bei mir funktioniert.
<input type="button" value="PDF" onclick="location.href='@Url.Action("Export","tblOrder")'"/>
Html.ActionLink
, um sie zu generieren. Versuchen Sie nicht, solche Mikrooptimierungen durchzuführen. Sie werden mit hässlichem Code in Ihren Ansichten enden.