Powiedzmy, że mam klasę
public class ItemController:Controller
{
public ActionResult Login(int id)
{
return View("Hi", id);
}
}
Na stronie, która nie znajduje się w folderze Element, w którym się ItemController
znajduje, chcę utworzyć link do Login
metody. Więc której Html.ActionLink
metody powinienem użyć i jakie parametry powinienem przekazać?
W szczególności szukam zastąpienia metody
Html.ActionLink(article.Title,
new { controller = "Articles", action = "Details",
id = article.ArticleID })
który został wycofany w ostatnim wcieleniu ASP.NET MVC.
c#
.net
asp.net-mvc
html-helper
actionlink
Grawiton
źródło
źródło
Odpowiedzi:
Myślę, że chcesz tego:
ASP.NET MVC1
Wykorzystuje następującą metodę sygnatury ActionLink:
ASP.NET MVC2
zamieniono dwa argumenty
Wykorzystuje następującą metodę sygnatury ActionLink:
ASP.NET MVC3 +
argumenty są w tej samej kolejności co MVC2, jednak wartość id nie jest już wymagana:
Pozwala to uniknąć zakodowania na stałe logiki routingu w łączu.
Otrzymasz następujące dane wyjściowe HTML, przy założeniu:
article.Title = "Title"
article.ArticleID = 5
. .
źródło
, null
parametr PO swoimnew { ... }
... ponieważ jeśli sprawdzisz przeciążenia tej metody, to myślisz, że twoje parametry są htmlArguments ... nie przekierowuj argumentów. Aby użyć poprawnej metody, musisz użyć metody, która marouteArguments, htmlArguments
.. więc po prostu podaj wartość null dla tego ostatniegohtmlArgument
. Pierwszy fragment kodu w tej odpowiedzi ma to. Zaktualizowałem ten post, abyś mógł go łatwo zobaczyć (tzn. Nie przewija się).@Html.ActionLink("Text","Action","Controller", new { item.ID }, null)
Chciałem dodać do odpowiedzi Josepha Kingry'ego . Dostarczył rozwiązanie, ale na początku nie mogłem go uruchomić i uzyskałem wynik taki jak Adhip Gupta. I wtedy zdałem sobie sprawę, że trasa musi przede wszystkim istnieć, a parametry muszą dokładnie pasować do trasy. Miałem więc identyfikator, a następnie parametr tekstowy dla mojej trasy, który również musiał zostać uwzględniony.
źródło
Możesz przyjrzeć się
RouteLink()
metodzie, która pozwala określić wszystko (oprócz tekstu linku i nazwy trasy) za pomocą słownika.źródło
Myślę, że Joseph zmienił kontroler i akcję. Najpierw jest akcja, potem kontroler. To trochę dziwne, ale sposób, w jaki wygląda podpis.
Żeby to wyjaśnić, działa ta wersja (adaptacja przykładu Józefa):
źródło
a co z tym
źródło
źródło
Jeśli chcesz nosić wszystkie fantazyjne spodnie, oto jak możesz je rozszerzyć, aby móc to zrobić:
Będziesz musiał umieścić to w
System.Web.Mvc
przestrzeni nazw:Obejmuje to dwa przesłonięcia,
Route Values
aHTML Attributes
także wszystkie Twoje widoki musiałyby zostać dodane:@using YourProject.Controllers
lub możesz dodać to do swojegoweb.config <pages><namespaces>
źródło
Użyj nazwanych parametrów, aby zwiększyć czytelność i uniknąć nieporozumień.
źródło
Z MVC5 zrobiłem to w ten sposób i jest to w 100% działający kod ....
Możecie sobie wyobrazić ...
źródło
Użyj tego typu:
@ Html.ActionLink („Strona główna”, „Indeks”, „Strona główna”)
Strona główna: Nazwa tekstu Indeks: Widok akcji Strona główna: HomeController
Baza Użyj ActionLink
źródło