2010-09-03 11 views
8

je dois avoir la logique de routage suivant:ASP.NET MVC 2 Paramètre Tableau

http://mydomain.com/myAction/ {racine}/{child1}/{child2}/...

Je ne sais quelle est la profondeur de la route donc je veux la signature de l'action à ressembler à quelque chose comme ça:

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

ne sais pas comment écrire cette route. Aidez-moi?

Merci beaucoup.

Répondre

15

Lorsque vous ajoutez le mappage suivant:

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

vous pouvez obtenir la chaîne 'url' dans votre méthode d'action:

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

La hiérarchie est alors facilement obtenu:

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

La création d'une URL à partir d'une liste de valeurs de chaîne peut être effectuée à l'aide d'une approche similaire:

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 peut alors être utilisé dans un lien d'action, par exemple:

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

Je n'ai pas encore vérifié mais cela semble fonctionner. Qu'en est-il du rendu d'un lien d'itinéraire? Je voudrais passer un tableau en tant que données de route. Des idées? – Sonia

+0

J'ai ajouté une approche à la publication. – Jeroen

+1

Fonctionne parfaitement! C'est une question de style mais au lieu d'utiliser l'écriture urlBuilder, j'ai utilisé string.Join ("/", strArray). Merci – Sonia

1

pour ce problème que vous devez utiliser urlBuilder fortement typé. Comme T4MVC

+0

Pourquoi cela aiderait-il? Pouvez-vous donner un exemple? – Rup