2010-09-03 17 views
8

Necesito tener la siguiente lógica de enrutamiento:ASP.NET MVC 2 parámetro de matriz

http://mydomain.com/myAction/ {raíz}/{child1}/{} child2/...

I don' sé lo que es la profundidad de la ruta así que quiero la firma de la acción a ser algo como lo siguiente:

public ActionResult myAction(string[] hierarchy) 
{ 
    ... 
} 

no tienen idea de cómo escribir esa ruta. ¿Ayuda?

Muchas gracias.

Respuesta

15

Cuando se agrega el siguiente mapeo:

routes.MapRoute("hierarchy", "{action}/{*url}" 
    new { controller = "Home", action = "Index" }); 

se puede obtener la cadena 'url' en su método de acción:

public ActionResult myAction(string url) 
{ 
    ... 
} 

continuación, se obtiene fácilmente la jerarquía:

string[] hierarchy = url.Split('/'); 

Crear una url a partir de una lista de valores de cadena se puede hacer utilizando un enfoque similar:

string firstPart = hierarchy.Count() > 0: hierarchy[0] : string.Empty; 
StringBuilder urlBuilder = new StringBuilder(firstPart); 
for (int index = 1; index < hierarchy.Count(); index++) 
{ 
    urlBuilder.Append("/"); 
    urlBuilder.Append(hierarchy[index]); 
} 

urlBuilder continuación, se puede utilizar en un enlace de acción, por ejemplo:

<%= Html.ActionLink("Text", new { Controller="Home", Action="Index", Url=urlBuilder.ToString() }) %> 
+0

No lo he comprobado todavía, pero parece que funciona. ¿Qué pasa con la representación de un enlace de ruta? Me gustaría pasar una matriz como datos de ruta. ¿Algunas ideas? – Sonia

+0

He agregado un enfoque a la publicación. – Jeroen

+1

¡Funciona a la perfección! Es una cuestión de estilo, pero en lugar de utilizar la escritura de urlBuilder, utilicé string.Join ("/", strArray). Gracias – Sonia

1

para este problema que su necesidad de utilizar inflexible urlBuilder. Como T4MVC

+0

¿Por qué sería útil? ¿Puede dar un ejemplo? – Rup

Cuestiones relacionadas