MVC的ActionLink产生不同类型的链接...为什么呢?
-
06-09-2019 - |
题
我是新来的MVC土地,并有我工作的一个应用程序。我有2条路线在我的全球其是2个不同的链接相当similiar
路线1
routes.MapRoute("Category", "Movies/{category}/{subcategory}",
new { controller = "Catalog", action = "Index", category = "", subcategory = "" });
路线2
routes.MapRoute("Movie", "Movie/{movie}",
new { controller = "Movie", action = "Index", movie = "" });
当我调用ActionLink的为它创建它,因为我会认为第一路线应:
.../Movies/Category/SubCategory
然而,当创建我第二连杆它填充这样的:
.../Movie?movieId=ff569575-08ec-4049-93e2-901e7b0cb96a
我使用的是字符串,而不是之前的GUID和它仍然做同样即
.../Movie?movieName=Snatch
我的actionlinks被设置如下
<%= Html.ActionLink(parent.Name, "Index", "Catalog",
new { category = parent.Name, subCategory = "" }, null)%>
<%= Html.ActionLink(movie.Name, "Index", "Movie",
new { movieId = movie.MovieId }, null)%>
我的应用程序仍然有效,但我认为这种行为很奇怪。任何帮助将是巨大的。
谢谢!
解决方案
routes.MapRoute("Movie", "Movie/{movieId}",
new { controller = "Movie", action = "Index", movie = "" });
如果路由文本不是您所提交的MVC链接的属性的名称相匹配?
其他提示
的问题是,当调用ActionLink的,路由系统不能找出要使用的两条路由的,因此它选择第一个。该解决方案是使用RouteLink而不是ActionLink的。 RouteLink允许您指定生成的URI时使用的路由的名称。那么有没有歧义,以使用哪条路线。我认为ActionLink的是过时的。我能想到的任何理由以代替RouteLink的使用它。
然而,你可能仍然有一个问题,当用户提交的链接。在这种情况下,使用路由约束来执行正确的路线的选择。
安德鲁是正确的(向上投票),您在ActionLink的/ RouteLink使用令牌和路由本身必须匹配。
不隶属于 StackOverflow