2010-08-05 3 views
0

Je dois créer un schéma d'URL comme celui-ciitinéraire carte asp.net avec le paramètre dans le contrôleur et la vue

friend/{userid}/wishlist 

où ami est le contrôleur, liste est la vue, et userid est l'id ami hte dont liste de souhaits que vous aimeriez voir.

J'ai installé une route comme celui-ci

routes.MapRoute(
      "FriendWishlist", 
      "friend/{userid}/wishlist", 
      new { controller = "WishList", action="FriendWishlist", userid = 123} 
      ); 

lorsque je tente de parcourir pour /friend/123/wishlist j'obtenir l'erreur suivante

Une méthode d'action publique « 123 » n'a pas été trouvé sur le contrôleur 'GiffrWeb.Areas.Api.Controllers.FriendController'.

Répondre

1

Les routes dans MVC sont évaluées dans l'ordre où elles sont déclarées. Il semble très bien comme vous avez déclaré votre itinéraire ci-dessous la valeur par défaut un:

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

routes.MapRoute(
    "FriendWishlist", 
    "friend/{userid}/wishlist", 
    new { controller = "WishList", action="FriendWishlist", userid = 123} 
); 

Ainsi, le framework MVC tente de correspondre à votre URL /friend/123/wishlist d'abord à la route par défaut. Parce que toutes les variables ont un défaut ou sont optionnelles, elles sont garanties. Il ne vérifie pas si les contrôleurs et les actions existent et prend les arguments pertinents. Vous avez une classe FriendController - vérifiez. 123 action - ça va bang.

Correction la plus simple - déclarez la route au-dessus de celle par défaut (c'est-à-dire échangez simplement ces deux instructions) et cela devrait fonctionner correctement.

Je pourrais ajouter qu'il est un peu bizarre d'avoir une URL qui commence par /friend/ en allant vers un contrôleur WishList lorsque vous avez évidemment un contrôleur Friend (votre message d'erreur le dit). Finalement, je ne peux pas recommander assez fortement que si vous introduisez le routage personnalisé que vous testez également ces routes soigneusement - comme vous l'avez vu, le moteur de routage peut souvent ne pas faire ce que vous pensez qu'il fait. Je recommande soit les trucs de test de route dans MvcContrib ou blog post de Brad Wilson.

+0

merci pour votre réponse réfléchie. Je vous en suis reconnaissant. –

Questions connexes