Considérez la barre latérale suivante:comportement de routage étrange dans MVC
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.
Pouvez-vous publier cette action '/ Partners/active' –
Afficher également les définitions de votre itinéraire –
Les deux ont été ajoutés. – Detilium