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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top