2

Je travaille sur le projet http://mvcforum.codeplex.com.Problèmes de routage ASP.NET MVC 3

Nous avons 2 zones, Forum et ForumAdmin.

J'ai quelques routes nommées, pour faire une belle URL avec des titres forum/sujet dans l'URL:

context.MapRoute("ShowTopic", "Forum/Topic/{id}/{title}", new { controller = "Topic", action = "Index" }); 
context.MapRoute("ShowForum", "Forum/Forum/{id}/{title}", new { controller = "Forum", action = "Index" }); 
context.MapRoute("ShowCategory", "Forum/Category/{id}/{title}", new { controller = "Category", action = "Index" }); 

context.MapRoute(
    "Forum_default", 
    "Forum/{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    new string[] { "mvcForum.Web.Areas.Forum.Controllers" } 
); 

donc ceci fonctionne presque comme prévu. Quand je suis juste en naviguant sur tout forum fonctionne très bien, mais quand je dois poster un sujet (Créer méthode sur le contrôleur de sujet), il échoue:

Le dictionnaire des paramètres contient une entrée nulle pour le paramètre « id 'de type non-nullable' System.Int32 'pour méthode' System.Web.Mvc.ActionResult Index (Int32, System.String, Int32) 'dans ' mvcForum.Web.Areas.Forum.Controllers.ForumController ' . Un paramètre facultatif doit être un type de référence , un type Nullable, ou être déclaré en tant que paramètre facultatif. Nom du paramètre: paramètres

Ce qui revient plus ou moins à ne pas utiliser la méthode Create, mais à sélectionner la méthode Index.

Une idée de ce que je fais mal? Et quelles routes dois-je/ne dois-je pas faire fonctionner?

Merci d'avance! Steen

Répondre

4

L'URL Forum/Topic/Create frapperait la route Forum/Topic/{id}/{title}

Le problème est, la route Forum/Topic/{id}/{title} et Forum/{controller}/{action}/{id} sont la plupart du temps impossibles à distinguer (comment votre moteur d'itinéraire savoir que « Créer » est pas un id pour la route Sujet ?

en tant que tel, je ne sais pas mieux que de déclarer chaque action avec leur propre itinéraire:

context.MapRoute("CreateTopic", "Forum/Topic/Create/", 
    new { controller = "Topic", action = "Create" }); 
context.MapRoute("ShowTopic", "Forum/Topic/{id}/{title}", 
    new { controller = "Topic", action = "Index" }); 
+0

C'est ce que j'étais peu peur de, de cette façon, je dois créer des routes nommées pour chaque action qu'il y a. –

+0

Le vrai problème est que la route "ShowTopic" a "Sujet" comme 2. partie de l'URL, qui dans ce cas correspond à un contrôleur réel. Pour l'instant je suppose que le correctif sera de réécrire la route "ShowTopic" à quelque chose qui n'a pas de sujet en tant que 2. partie. –