2009-01-04 28 views
5

estoy trato de encontrar la manera de manejar la situación siguiente. En general, tengo muchos registros en una tabla. Todos estos tienen campos ID y ParentID para formar un árbol.página ASP.NET MVC/subpágina enrutamiento

Page1 
- Page2 
- Page3 
Page4 
- Page5 
-- Page6 

Ahora, quiero que mis rutas para Page3 y Page6 sean como /Page1/Page6 y /Page3/Page5/Page6 respectivelly. Es decir, quiero incluir a todos los padres en la URL.

¿Cómo establecer mi acción/enrutamiento del controlador para lograr el resultado anterior?

Editar: Se me olvidó mencionar que la estructura anterior será dinámico - Se pueden añadir nodos/borrado cambio padre /, etc.

+0

Tome un vistazo a [esta] (http://stackoverflow.com/questions/296284/mvc-dynamic-routes) >> http://stackoverflow.com/questions/296284/mvc-dynamic- rutas – Mark79

Respuesta

3

Se puede usar un partido de comodín, vea: http://www.vergentsoftware.com/blogs/ckinsman/ASPNETMVCWildcardRoutes.aspx

Una posible ruta:

routes.MapRoute("SomeName", "{*Page}", new { controller = "ControllerName", action = "ActionName" }); 

y en la acción aceptan la cadena de página y analizarlo de forma manual, tal vez con una división?

editar: esto también podría ser útil: http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx

+1

Gracias, ayudó mucho. Ahorré mi tiempo. –

+0

@MichaelSamteladze np, eso fue hace casi ocho años :) – ccook

0

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 
    } 
} 
Cuestiones relacionadas