2011-02-08 40 views
0

我有一些MVC 2的路由問題。可能是一個簡單的問題,但我不能讓它運行。我已經註冊了第二路由包括語言:ASP.NET MVC 2路由:添加語言,在URL中離開時不工作

routes.MapRoute(
    // Route name 
    "LangRouting",   
    // URL with parameters 
    "{currentLang}/{controller}/{action}/{id}",   
    // Parameter defaults 
    new { currentLang = "de", controller = "Home", action = "Index", 
     id = UrlParameter.Optional }    
); 

routes.MapRoute(
    // Route name 
    "Default", 
    // URL with parameters 
    "{controller}/{action}/{id}",     
    // Parameter defaults 
    new { controller = "Home", action = "Index"}    
); 

現在,當我打電話{...}/de/Home/Index/一切工作正常。但是,如果我離開語言並撥打{...}/Home/Index/,則無法找到頁面(「無法找到資源」)。我預料到這應該在URL中沒有語言的情況下運行,並且MVC會在那裏插入我的默認值。它是如何工作的?

回答

4

您必須對語言使用約束。

/Home/Index 

將被翻譯成第一條爲

lang = Home 
controller = Index 
action = Index (from defaults) 

這應該做的伎倆:

routes.MapRoute("Default with language", "{lang}/{controller}/{action}/{id}", new 
{ 
    controller = "Home", 
    action = "Index", 
    id = UrlParameter.Optional, 
}, new { lang = "de|en" }); 
routes.MapRoute("Default", "{controller}/{action}/{id}", new 
{ 
    controller = "Home", 
    action = "Index", 
    id = UrlParameter.Optional, 
    lang = "en", 
}); 
+0

嗯聽起來不錯,但仍然沒有爲我工作。它仍然導致未找到,但這次未找到消息來自IIS:「HTTP錯誤404.0 - 未找到 您正在尋找的資源已被刪除,其名稱已被更改爲 或暫時不可用。如果我在URL中保留該語言,它仍然按預期工作。 – sl3dg3 2011-02-08 15:46:55