2012-04-23 47 views
0

控制器我有網站,顯示用戶在頭版提交的內容在30成多種語言,我目前使用類似的路徑:映射查詢字符串值作爲路線

http://www.example.com?lang=en 

,或者如果它不是

http://www.example.com?lang=en&page=2 
第一頁

但這真的不是用戶或seo友好。 是否有MVC的方式來放置這些數值,如

http://www.example.com/en 

http://www.example.com/en/2 

沒有在這種情況下lang在中間添加一個類似的新行動:

http://www.example.com/lang/en/2

更新。以下是我從Alexeis答案出來了,萬一有人需要同樣的事情:

在短短語言的情況下:

routes.MapRoute("MyLang", "{lang}", new { controller = "Home", action = "Index" },new { lang = @"\D{2}"}); 

如果你需要的語言和可選頁:

routes.MapRoute("MyLang", "{lang}/{page}", new { controller = "Home", action = "Index", page = UrlParameter.Optional }, new { lang = @"\D{2}", page = @"\d+"}); 

它不應該捕獲任何其他路徑,除非你有隻有2個字母的行動。

回答

1

您不需要「lang /」來匹配文化。只要您以某種方式排列路線以便其他路線正確匹配,簡單的「{lang}」就會完成。您也可以考慮constraints路由參數來限制衝突的數量。

routes.MapRoute("MyLang", "{lang}", 
    new { controller = "Home", action = "Home", } 

class HomeController{ 
    public ActionResult Home(string lang) 
    { 
    return View(); 
    } 
} 
+0

謝謝我會試試這個。 – formatc 2012-04-23 16:49:48

0

U可以添加這樣

routes.MapRoute("MyLang", "{action}/{page}", 
    new { controller = "ControllerName",page=0 } 

一條新的路線這樣的郎的名字將被自動映射到該動作和頁面作爲參數提供u有行動的簽名

將被傳遞
public ActionResult English(int page) 

obsly返回類型和操作名稱可以更改