2011-09-27 4 views
1

Résultat ActionLink "http: // localhost: 5089/Article/GetArticlesByCategory? Category = ASP.NET & categoryId = 2". Je veux montrer ce type de lien "http: // localhost: 5089/Blog/ASP.NET". Quel est le mauvais itinéraire nommé "Article".MVC 3 Problème d'itinéraire

Routes:

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

routes.MapRoute(
       "Article", 
       "Blog/{category}", // 
       new { controller = "Article", action = "GetArticlesByCategory", category = UrlParameter.Optional, categoryId = UrlParameter.Optional } 

Lien:

@Html.ActionLink(k.Name, "GetArticlesByCategory", "Article", 
new { category = k.Name, categoryId = k.CategoryId }, null) 

RESOUDRE

paramètre GetArticlesByCategory int categoryId changé >> catégorie de chaîne et remplacé les codes d'action à nouveau paramètre (catégorie chaîne

Routes remplacées par:

 routes.MapRoute(
      "Category", 
      "Blog/{category}", 
      new { controller = "Article", action = "GetArticlesByCategory", category = UrlParameter.Optional } 
     ); 

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

ActionLink remplacé par:

@Html.ActionLink(k.Name, "GetArticlesByCategory", "Article", 
new { category = k.Name }, null) 

Répondre

2

Il existe quelques problèmes. Tout d'abord, et le plus important, vos itinéraires sont spécifiés dans le mauvais ordre. L'itinéraire par défaut doit être défini en dernier. Deuxièmement, ne définissez jamais un itinéraire avec deux paramètres facultatifs. Cela cause juste trop de problèmes.

Effectuez les opérations suivantes pour vos itinéraires:

routes.MapRoute(
    "CategoryAndId", 
    "Blog/{category}/{categoryId}", 
    new { controller = "Article", action = "GetArticlesByCategory" } 
); 

routes.MapRoute(
    "CategoryOnly", 
    "Blog/{category}", 
    new { controller = "Article", action = "GetArticlesByCategory", 
     category = UrlParameter.Optional } 
); 

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

Vous ne précisent pas l'action dans la voie

routes.MapRoute(
       "Article", 
       "Blog/{action}/{category}/{categoryId}", // 
       new { controller = "Article", action = "GetArticlesByCategory", category = UrlParameter.Optional, categoryId = UrlParameter.Optional } 

Je vous suggère d'utiliser des itinéraires de Phil Haack debug, http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx. Un excellent moyen pour le débogage de vos routes MVC

+0

rien changé avec cette route, mais votre suggestion agréable ty. – ALKAN

+0

Quel est le nom du contrôleur et l'action que vous devez utiliser pour cette route? – Brettski

+0

controller = "Article" et action = "GetArticlesByCategory" – ALKAN

0

Si vous voulez que le lien pour montrer que http://localhost:5089/Blog/ASP.NET, vous devrez changer le ActionLink en tant que tel:

@Html.ActionLink(k.Name, "GetArticlesByCategory", "Article", 
    new { category = k.Name }, new { @title = "Kategorisindeki Makaleler", @class = "selected" }) 

Puisque vous ne voulez pas le CategoryID dans la lien, il n'y a pas besoin de le mettre dans. la route n'est pas compensée par l'ActionLink car il attend un paramètre CategoryID ainsi

EDIT

Si vous voulez que le CategoryID à lire à partir l'itinéraire, il doit être ajouté à l'itinéraire. sinon, il sera simplement ajouté en tant que paramètre (comme dans votre exemple original).

Si vous changez votre itinéraire:

"Blog/{categoryId}/{category}" 
or 
"Blog/{category}/{categoryId}" 

Le lien ressemblera maintenant Blog/2/ASP.NET ou Blog/ASP.NET/2 mais si vous voulez que le categoryId à lire à partir de l'URL, alors je ne pense pas que vous avez beaucoup de choix

+0

paramètre categoryId de GetArticlesByCategory – ALKAN