Czy jest jakaś różnica między HTML.ActionLinkvs Url.Actionczy są to tylko dwa sposoby robienia tego samego?
Kiedy powinienem preferować jeden od drugiego?
Czy jest jakaś różnica między HTML.ActionLinkvs Url.Actionczy są to tylko dwa sposoby robienia tego samego?
Kiedy powinienem preferować jeden od drugiego?
Odpowiedzi:
Tak, jest różnica. Html.ActionLinkgeneruje <a href=".."></a>tag, podczas gdy Url.Actionzwraca tylko adres URL.
Na przykład:
@Html.ActionLink("link text", "someaction", "somecontroller", new { id = "123" }, null)
generuje:
<a href="/somecontroller/someaction/123">link text</a>
i Url.Action("someaction", "somecontroller", new { id = "123" })generuje:
/somecontroller/someaction/123
Istnieje również Html.Action, która wykonuje akcję kontrolera podrzędnego.
<a>). Użyj Url.Action, jeśli potrzebujesz wygenerować tylko adres URL (może to również zostać użyte w akcji kontrolera).
Url.Actionjest znacznie bardziej wydajny niż Html.ActionLink. Miałem listę 6000 przedmiotów, które miały 2 Html.ActionLinks. Renderowanie listy zajęło 6600 ms. Bez Html.ActionLinkstego zajęło 52 ms. Korzystanie z Url.Actionniego zajęło 270 ms. To prawda, 6000 pozycji to duża lista, ale pomyślałem, że dodam ją na przyszłość.
Html.ActionLink generuje <a href=".."></a>automatycznie tag.
Url.Action generuje tylko adres URL.
Na przykład:
@Html.ActionLink("link text", "actionName", "controllerName", new { id = "<id>" }, null)
generuje:
<a href="/controllerName/actionName/<id>">link text</a>
i
@Url.Action("actionName", "controllerName", new { id = "<id>" })
generuje:
/controllerName/actionName/<id>
Najlepszy punkt plus, który lubię, to używanie Url.Action(...)
Sam tworzysz tag zakotwiczenia, w którym możesz łatwo ustawić własny linkowany tekst, nawet przy użyciu innego tagu HTML.
<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>
}
W powyższym przykładzie widać, że jeśli konkretnie potrzebuję przycisku, aby wykonać jakąś akcję, muszę to zrobić za pomocą @ Url.Action, natomiast jeśli chcę tylko link, użyję @ Html.ActionLink. Chodzi o to, że musisz użyć jakiegoś elementu (HTML) z adresem URL akcji.
@HTML.ActionLinkgeneruje HTML anchor tag. Podczas gdy @Url.Actiongeneruje URLdla ciebie. Możesz to łatwo zrozumieć poprzez;
// 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>
Oba te podejścia są różne i zależy to całkowicie od twoich potrzeb.
Możesz łatwo przedstawić Html.ActionLink jako przycisk, używając odpowiedniego stylu CSS. Na przykład:
@Html.ActionLink("Save", "ActionMethod", "Controller", new { @class = "btn btn-primary" })
Użyłem poniższego kodu, aby utworzyć Button i zadziałało to dla mnie.
<input type="button" value="PDF" onclick="location.href='@Url.Action("Export","tblOrder")'"/>
Html.ActionLinkich , aby je wygenerować. Nie próbuj robić takich mikrooptymalizacji. Skończysz z brzydkim kodem w swoich widokach.