2010-09-09 49 views
0

我想創建一個帶有正則表達式約束的ASP.NET MVC2路由來過濾語言名稱(比如en-us,pt-br),但不幸的是它不起作用。看看:無法弄清楚爲什麼這個MVC2路線不起作用

routes.MapRoute(
    "Culture", // Route name 
    "{culture}", // URL with parameters 
    new { controller = "Home", action = "Culture" }, // Parameter defaults 
    new { culture = @"^[a-z]{2}-[a-z]{2}$" } 
); 

有沒有人有任何想法?

編輯:的URL我測試是http://localhost/en-us

回答

0

我不知道爲什麼它不」噸工作在你的情況下,但這裏有什麼作品:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Culture", 
     "{culture}", 
     new { controller = "Home", action = "Culture" }, 
     new { culture = @"^[a-z]{2}-[a-z]{2}$" } 
    ); 

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

控制器:

public class HomeController : Controller 
{ 
    public ActionResult Culture(string culture) 
    { 
     return View(); 
    } 
} 

URL:http://example.com/en-us成功調用上HomeControllerCulture動作並在培養物參數傳送en-us

+0

男人!我在測試之前忘了設置文化操作!感謝你賜給我的光明! – 2010-09-09 13:00:47

1

區分大小寫的吧?

「EN-US」

因此,你需要:

new { culture = @"^[a-z]{2}-[A-Z]{2}$" } 

但是用這個,使其不區分大小寫:

new { culture = @"^[a-zA-Z]{2}-[a-zA-Z]{2}$" } 
+0

我在url上使用http:// localhost/en-us,所以它的小寫就像正則表達式所示。我會將其添加到問題中。 – 2010-09-09 12:51:52

相關問題