我是新来的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使用令牌和路由本身必须匹配。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top