2009-07-25 2 views
1

Je suis perdu ... voici mon itinéraire:ASP.NET MVC - problème de routage étrange, très simple problème d'incompatibilité d'itinéraire

routes.MapRoute("LangOnly", "{language}", 
    new { controller = "Home", action = "Root", language = "en" }, 
    new { language = @"en|ja" }); 

il correspond www.domain.com/en, mais ne correspond pas correspondre www.domain.com/ja.

huh? Je suis même allé jusqu'à commenter d'autres routes ... un peu coincé. ;/

Mise à jour: Voici l'action root sur le contrôleur Home.

[CompressFilter] 
public ActionResult Root() 
{ 
    if (!IsEnglish) 
     return RedirectToAction("Index", "Biz", new { b = "" }); 

    return Request.IsAuthenticated ? View("LoggedInRoot") : View("Root"); 
} 

Il ne prend pas un paramètre de langue, car il est en cours mis sur le contrôleur de base OnActionExecuting, comme ceci:

var l = (RouteData.Values["language"] != null) ? RouteData.Values["language"].ToString() : string.Empty; 

    if (string.IsNullOrEmpty(l)) 
     l = "en"; 

    if (l.Contains("en")) 
    { 
     IsEnglish = true; 
     l = "en"; 
    } 
    else 
    { 
     IsEnglish = false; 
     l = "ja"; 
    } 

    ViewData["lang"] = l.ToLower(); 
    Language = l.ToLower(); 
+2

Avez-vous essayé le débogueur de route de Haacked? http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx –

+0

Avez-vous des routes au-dessus de cela? –

+0

Je viens de le tester avec le débogueur de route (merci pour le lien), il dit "vrai" qu'il correspond ... wth? – Chaddeus

Répondre

1

fonctionne parfaitement pour moi avec votre itinéraire. Essayez cette configuration simple:

routes.MapRoute("LangOnly", "{language}", 
       new {controller = "Home", action = "Index", language = "en"}, 
       new {language = @"en|ja"}); 


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

Et votre action:

public ActionResult Index(string language) 
{ 
..... 

(J'utilise "Index" que l'action ici, évidemment changer à "Root" si c'est en fait votre nom d'action .)

+0

a trouvé l'erreur, la redirection sur l'action home/root ne correspondait pas. Pouah. Je vous remercie! – Chaddeus