MVC ActionLink生成不同类型的链接......为什么?

时间:2009-02-23 21:13:31

标签: c# asp.net-mvc actionlink

我是MVC的新手,并且有一个我正在努力的应用程序。我有两个不同的链接,在我的全球范围内有两条相似的路线

路线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 = "" });

当我为第一条路线调用一个动作链接时,它会按照我的想法创建它:

  

.../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)%>

我的应用仍然有效,但我认为这种行为很奇怪。任何帮助都会很棒。

谢谢!

2 个答案:

答案 0 :(得分:5)

routes.MapRoute("Movie", "Movie/{movieId}", 
    new { controller = "Movie", action = "Index", movie = "" });

路由文本是否与您提交给mvc链接的属性的名称不匹配?

答案 1 :(得分:4)

问题在于,当您调用ActionLink时,路由系统无法确定要使用的两条路由中的哪一条,因此它会选择第一条路由。解决方案是使用RouteLink而不是ActionLink。 RouteLink允许您指定生成URI时要使用的路由的名称。然后,对于使用哪条路线没有歧义。我认为ActionLink已经过时了。我认为没有理由用它来代替RouteLink。

但是,当用户提交链接时,您可能仍会遇到问题。在这种情况下,使用路线约束来强制选择正确的路线。

Andrew正确(投票)您在ActionLink / RouteLink中使用的令牌和路线本身必须匹配。

相关问题