2010-10-08 11 views
3

j'ai le routage par défaut:Impossible de lier au paramètre

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

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

J'ai un contrôleur: NewsController. Il a une méthode, comme ceci:

public ActionResult Index(int id) 
{ 
    ... 
} 

Si je navigue vers/News/Index/123, cela fonctionne./Nouvelles/123 œuvres. Cependant,/News/Index? Id = 123 ne le fait pas (il ne peut trouver aucune méthode nommée "index" où id est autorisé à être nul). Il semble donc que je manque de compréhension sur la façon dont le routage et le modelbinder fonctionnent ensemble.

La raison de demander est que je veux avoir une liste déroulante avec différentes sources de nouvelles, avec le paramètre "id". Je peux donc sélectionner une source de nouvelles (par exemple "sport", id = 123) et elle devrait être routée vers ma méthode d'index. Mais je n'arrive pas à faire fonctionner ça.

+3

Peut-être que vous devriez juste faire la signature de méthode de cette façon: Index (int? Id)? – Restuta

+0

Oui, et je l'ai résolu pour le moment avec if (! Id.HasValue) {id = int.Parse (Request.QueryString ["id"]); } Mais j'aimerais comprendre pourquoi j'ai besoin de faire ça. –

Répondre

1

Le routage ASP.NET MVC fonctionne à l'aide de la réflexion. Il cherchera dans le contrôleur une méthode correspondant au motif que vous définissez dans vos itinéraires. S'il ne peut pas en trouver un ... eh bien, vous avez vu ce qui se passe.

Donc, la réponse est (telle que publiée dans les commentaires) de changer le type de votre id paramètre à un Nullable<int>, c'est-à-dire int?.