Enrutamiento de página / subpágina ASP.NET MVC
-
03-07-2019 - |
Pregunta
Estoy tratando de descubrir cómo manejar el siguiente escenario. En general, tengo un montón de registros en una tabla. Todos estos tienen campos ID y ParentID para formar un árbol.
Page1
- Page2
- Page3
Page4
- Page5
-- Page6
Ahora, quiero que mis rutas para Página3 y Página6 sean como / Page1 / Page6
y / Page3 / Page5 / Page6
respectivamente. Es decir, quiero incluir a todos los padres en la URL.
¿Cómo configurar la acción / enrutamiento de mi controlador para lograr el resultado anterior?
Editar: Olvidé mencionar que la estructura anterior será dinámica: los nodos se pueden agregar / eliminar / cambiar padre, etc.
Solución
Podría usar una coincidencia con comodines.
Una ruta posible:
routes.MapRoute("SomeName", "{*Page}", new { controller = "ControllerName", action = "ActionName" });
y en la acción, acepte la página de cadena y analice manualmente, ¿tal vez con una división?
Esto también podría ser útil: Enrutamiento de URL
Otros consejos
Tenga en cuenta que el nombre y la acción del controlador son fijos y no se basan en la 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
}
}
Deberías usar
routes.MapRoute("Page6", "Page3/Page5/Page6", new { controller = "Page6", action = "Index" });
o tal vez usando el enrutamiento de expresiones regulares
http: / /blog.sb2.fr/post/2009/01/03/Regular-Expression-MapRoute-With-ASPNET-MVC.aspx