2010-09-09 8 views
0

J'essaye de créer une route ASP.NET MVC2 avec une contrainte d'expression régulière pour filtrer les noms de langue (comme en-us, pt-br) mais malheureusement ne fonctionne pas. Jetez un coup d'oeil:Impossible de comprendre pourquoi cette route MVC2 ne fonctionne pas

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

Quelqu'un a-t-il une idée?

Edit: L'URL je suis test est http://localhost/en-us

Répondre

0

Je ne sais pas pourquoi il n » t travailler dans votre cas, mais voici ce qui fonctionne:

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 } 
    ); 
} 

Controller:

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

URL: http://example.com/en-us invoque bien l'action Culture sur HomeController et passe en-us dans le paramètre de culture.

+0

Homme! J'ai oublié de mettre l'action Culture avant les tests! Merci pour la lumière que tu m'as donnée! –

1

cas peut-être sensible?

"en-US"

Alors vous avez besoin:

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

Mais utiliser celui-ci pour le rendre insensible à la casse:

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

J'utilise http: // localhost/en-us sur l'url, donc c'est en minuscule comme le suggère l'expression régulière. Je vais l'ajouter à la question. –

Questions connexes