MVC ActionLink générer différents types de liens ... pourquoi?
-
06-09-2019 - |
Question
Je suis nouveau à la terre MVC, et ont une application que je travaille. J'ai 2 différents liens avec 2 voies dans mon monde qui sont assez similaire
itinéraire 1
routes.MapRoute("Category", "Movies/{category}/{subcategory}",
new { controller = "Catalog", action = "Index", category = "", subcategory = "" });
itinéraire 2
routes.MapRoute("Movie", "Movie/{movie}",
new { controller = "Movie", action = "Index", movie = "" });
Quand j'appelle un ActionLink pour la première voie qu'il crée comme je pense qu'il devrait:
.../Movies/Category/SubCategory
Mais quand je crée mon deuxième lien comme il renseigne ce:
.../Movie?movieId=ff569575-08ec-4049-93e2-901e7b0cb96a
J'utilisais une chaîne au lieu d'un guid avant et il faisait toujours le même i.e..
.../Movie?movieName=Snatch
mes ActionLinks sont définies comme suit
<%= Html.ActionLink(parent.Name, "Index", "Catalog",
new { category = parent.Name, subCategory = "" }, null)%>
<%= Html.ActionLink(movie.Name, "Index", "Movie",
new { movieId = movie.MovieId }, null)%>
Mon application fonctionne toujours, mais je pensais que ce comportement était étrange. toute aide serait grande.
Merci!
La solution
routes.MapRoute("Movie", "Movie/{movieId}",
new { controller = "Movie", action = "Index", movie = "" });
le texte de la route doit correspondre à pas le nom de la propriété que vous soumettez au lien mvc?
Autres conseils
Le problème est que lorsque vous appelez ActionLink, le système de routage ne peut pas comprendre lequel des deux voies à utiliser, il choisit la première. La solution est d'utiliser RouteLink au lieu de ActionLink. RouteLink vous permet de spécifier le nom de la route à utiliser pour générer l'URI. Ensuite, il n'y a pas d'ambiguïté sur la route à utiliser. Je pense que ActionLink est obsolète. Je ne peux penser à aucune raison de l'utiliser au lieu de de RouteLink.
Cependant, vous pouvez toujours avoir un problème lorsque l'utilisateur soumet des liens. Dans ce cas, utiliser des contraintes de route pour faire respecter le choix de l'itinéraire correct.
Andrew est correct (mise a voté) que les jetons que vous utilisez dans ActionLink / RouteLink et la route elle-même doit correspondre.