Routage de page / sous-page ASP.NET MVC
-
03-07-2019 - |
Question
J'essaie de comprendre comment gérer le scénario suivant. En général, j'ai un tas de disques dans un tableau. Tous ont des champs ID et ParentID pour former une arborescence.
Page1
- Page2
- Page3
Page4
- Page5
-- Page6
Maintenant, je veux que mes itinéraires pour Page3 et Page6 soient comme / page1 / page6
et / page3 / page5 / page6
respectivement. C’est-à-dire que je veux inclure tous les parents dans l’URL.
Comment définir l'action / le routage de mon contrôleur pour obtenir le résultat ci-dessus?
Modifier: vous avez oublié de préciser que la structure ci-dessus sera dynamique - des nœuds peuvent être ajoutés / supprimés / changer de parent, etc.
La solution
Vous pouvez utiliser une correspondance générique.
Un itinéraire possible:
routes.MapRoute("SomeName", "{*Page}", new { controller = "ControllerName", action = "ActionName" });
et dans l'action accepter la chaîne de caractères Page et l'analyser manuellement, éventuellement avec une scission?
Cela pourrait également être utile: Routage des URL
Autres conseils
Notez que le nom du contrôleur et l'action sont fixes et non basés sur l'URL.
// place the more specific route first
routes.MapRoute("r1", "{parent}/{child}/{subchild}",
new { controller = "Page", action = "Index", parent = parent, child = child, subchild = subchild });
routes.MapRoute("r2", "{parent}/{child}",
new { controller = "Page", action = "Index", parent = parent, child = child });
public class PageController
{
public ActionResult Index(string parent, string child, string? subchild)
{
// stuff
}
}
Vous devriez utiliser
routes.MapRoute("Page6", "Page3/Page5/Page6", new { controller = "Page6", action = "Index" });
ou peut-être en utilisant le routage d'expressions régulières
http: / /blog.sb2.fr/post/2009/01/03/Regular-Expression-MapRoute-With-ASPNET-MVC.aspx