2009-02-23 40 views
4

我是新來的MVC土地,並有一個應用程序,我正在努力。我有2路在我的世界。當我要求它創建它作爲第一個路徑的ActionLink的這是相當similiarMVC ActionLink生成不同類型的鏈接...爲什麼?

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

2個不同的鏈接我認爲它應該:

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

我的應用程序仍然有效,但我認爲這種行爲很奇怪。任何幫助都會很棒。

謝謝!

回答

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

如果路徑文本與您提交給mvc鏈接的屬性名稱不匹配?

+1

你說得對,他們可能希望改變對ActionLink/RouteLink的調用,而不是改變路線。 – 2009-02-23 21:26:23

4

問題是,當您調用ActionLink時,路由系統找不到要使用的兩條路線中的哪條路線,因此它會選擇第一條。解決方案是使用RouteLink而不是ActionLink。使用RouteLink可以指定生成URI時要使用的路由的名稱。然後,對於使用哪條路線沒有歧義。我認爲ActionLink已經過時了。我認爲沒有理由用它來代替RouteLink。

但是,用戶提交鏈接時可能仍然存在問題。在這種情況下,使用路由約束來強制選擇正確的路由。

Andrew是正確的(增加表決)您在ActionLink/RouteLink中使用的標記和路線本身必須匹配。