2017-09-26 107 views
1

我有一個簡單的路由映射。Url.Action()不會刪除默認值

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}/{seoName}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, seoName = UrlParameter.Optional } 
); 

現在,如果使用Url.Action("Index", "Home"),它不會正確地刪除路由的默認值。它給了我/Home/Index

現在,如果我刪除{id}{seoName}及其相應的默認值,那麼該URL將正確生成,如/(root)。

我在這裏失蹤了什麼?它似乎不是一個環境價值,因爲我正在訪問沒有id的主頁,也沒有seoNames。

任何想法?

+2

只有最後一個參數可以被標記'UrlParameter.Optional' –

+0

@StephenMuecke沒有意識到的,有趣的。請回答問題以接受它。 –

+1

恩科西已經添加了一個:) –

回答

2

您將需要多個映射才能實現所需內容,因爲只允許您將最後一個路徑佔位符設置爲可選。

routes.MapRoute(
    name: "SeoFriendly", 
    url: "{controller}/{action}/{id}/{seoName}", 
    defaults: new { controller = "Home", action = "Index", seoName = UrlParameter.Optional } 
); 

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
);