2010-12-13 6 views
0

J'ai modifié le routage par défaut dans ASP.NET MVC deASP.NET MVC 3 problème de routage RC 2

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

à

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

mais maintenant tous les appels @ Html.ActionLink() sont rendus à href = "". Si je change la route par défaut, tous les liens fonctionnent à nouveau. J'ai utilisé le même itinéraire avec RC1 et cela a parfaitement fonctionné.

Je n'ai rien trouvé dans les documents de sortie, donc je pense que je me trompe.

Cordialement, Steffen

Répondre

2

Dans un itinéraire un paramètre optionnel peut apparaître qu'à la fin. Cela signifie que dans votre définition d'itinéraire, le paramètre idne peut pas être être facultatif. Vous devez explicitement le définir sur une valeur.

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

Et lorsque vous générez un lien que vous devez toujours fournir une valeur pour le paramètre id si vous voulez que cette route corresponde:

@Html.ActionLink("some link", "index", new { id = "123" }) 

Comme alternative, vous pouvez donner une valeur par défaut à l'ID paramètre:

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

Vous n'avez plus besoin de le spécifier dans vos liens.

+0

Est-ce nouveau sur RC2? – forki23

+2

Je ne sais pas. Peut-être que cela aurait pu fonctionner dans les versions précédentes mais c'est une définition de route qui n'a pas de sens car si l'id est optionnel, le moteur de routage ne peut pas désambiguïser entre les paramètres id et lineNo. Peut-être que cette règle a été appliquée dans RC2, ce qui est une bonne chose à mon humble avis. –

+0

Merci. J'ai divisé la règle en deux parties et maintenant cela fonctionne bien. – forki23