2016-07-25 4 views
3

Considérez la barre latérale suivante:comportement de routage étrange dans MVC

enter image description here

Si j'appuie sur l'élément de sous-menu All solutions sous l'élément de menu Solutions, je verrais une grille un peu comme celui-ci:

L'URL de cette grille est https://something.com/Solutions. Maintenant, imaginez que je voulais aller dans l'élément de menu Partners et sous-élément de menu Active, l'url serait https://something.com/Partners/active.

J'utilise un Html.ActionLink simple comme si:

Html.ActionLink("- Active", "Active", "Partners", null, new { @class = "filter-button" }) 

PROBLÈME

Navigation à l'utilisateur de l'URL https://something.com/Partners/active en utilisant la Html.ActionLink la façon dont je le fais, cela devrait fonctionner, mais il doesn 't. Au lieu de me rediriger vers la vue des partenaires actifs, l'application me redirige vers https://something.com/Solutions (exactement où je viens de) mais avec cet URL: https://something.com/Solutions?undefined=undefined.

Si j'appuie sur l'élément de sous-menu Active dans l'élément de menu Partners une fois de plus, l'URL passe à https://something.com/Solutions?undefined=undefined&undefined=undefined et cela continue pour toujours.

Je ne sais absolument pas pourquoi cela se produit et je n'ai aucune solution. Toute aide est grandement appréciée.

PARTENAIRES/ACTIVE

public ActionResult Active() 
{ 
    using(var db = new DatabaseContext()) 
    { 
     var partners = db.Partners.Where(x => x.Active).ToList(); 

     return View(partners); 
    } 
} 

ROUTE DÉFINITIONS

routes.MapRoute(
    name: "ControllerIdActionId", 
    url: "{controller}/{id}/{action}/{id2}", 
    defaults: new { id2 = UrlParameter.Optional } 
); 
routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 
routes.MapRoute(
    name: "Solutions", 
    url: "{controller}/{id}/{action}/", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 

MISE À JOUR

Après avoir examiné les définitions de l'itinéraire, j'ai remarqué que la définition de l'itinéraire Solutions n'a jamais été utilisé. J'ai maintenant enlevé cette définition d'itinéraire ainsi les définitions d'itinéraire ressemblent à ceci:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 
routes.MapRoute(
    name: "ControllerIdActionId", 
    url: "{controller}/{id}/{action}/{id2}", 
    defaults: new { id2 = UrlParameter.Optional } 
); 

Cela n'avait fait aucune différence si. J'ai essayé de changer les deux routes autour de l'itinéraire ControllerIdActionId serait enregistré avant le Default, mais cela n'a aucun effet non plus.

+0

Pouvez-vous publier cette action '/ Partners/active' –

+0

Afficher également les définitions de votre itinéraire –

+0

Les deux ont été ajoutés. – Detilium

Répondre

0

L'ordre des routes est important. S'il vous plaît changer l'ordre des routes. Déplacez la route Default en 1ère position et essayez.

Aussi les routes ControllerIdActionId et Solutions ont besoin d'être affinées, elles ont l'air en panne. S'il vous plaît essayez de suivre certains modèles pour éviter les complications.

E.g.Controller/Action/ID