2010-09-09 50 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

相关问题