2012-06-15 23 views
0

我有一個「項目」控制器和一個「儀表板」操作,它採用名爲「accountID」的參數。MVC3:爲什麼Html.Action不會生成預期的URL

public ActionResult Dashboard(String accountID) 
{ 
    return View(); 
} 

我有一個路徑定義如下:

routes.MapRoute(
    "ProjectsHome", 
    "{accountID}/projects", 
    new { controller = "Projects", action = "Dashboard" } 
); 

的想法是有像/ 1111 /項目中1111表示的帳戶ID URL。該URL將執行項目控制器的儀表板操作。

的問題,我現在面臨的是@Html.ActionLink("Projects", "Dashboard", "Projects", new { accountID = "1111" }, null)產生像/項目/儀表板?一個URL帳戶ID = 1111,我期待像/ 1111 /項目

我的解決方法是使用@Url.RouteUrl("ProjectsHome", new { accountID = "1111"}),但我想知道爲什麼Html.ActionLink不會選擇我定義的路由並相應地設置URL的格式?

另一個有趣的事實是,在其中一個控制器的代碼中,我有像return RedirectToAction("Dashboard", "Projects", new { accountID = newAccount.ID });這樣的東西,它構建了我所期望的URL。

注:除通用「全部捕獲」之外,我沒有定義其他路由。我使用ASP.NET MVC3。

+0

不確定發生了什麼,但我不能再現它。 –

回答

0

我一直能夠複製你得到的結果的唯一方法是將「ProjectsHome」路線放置在以下的通用「全部」路線。當我將它放置在通用路由之上時,ActionLink以您想要的形式生成URL。

MVC路由引擎掃描路由表,直到找到可以匹配的路由表爲止,這意味着它永遠無法到達全部捕獲後的定義路由。

0

地圖路線需要被這樣定義 -

routes.MapRoute( 「ProjectsHome」, 「{帳戶ID} /工程」, 新{控制器= 「項目」,動作= 「儀表板」 ,accountID = UrlParameter.Optional} );

您錯過了定義地圖路線中的accountID。

相關問題