2010-09-03 134 views
8

我需要有以下的路由逻辑:ASP.NET MVC 2参数数组

http://mydomain.com/myAction/ {根}/{child1}/{的child2}/...

我不知道什么是路由 的深度,所以我想在动作的签名看起来类似的东西:

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

不知道如何写这条路线。帮帮我?

非常感谢。

回答

15

当您添加下面的映射:

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

你可以在你的操作方法获取字符串 'URL':

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

然后容易获得的层次:

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

使用类似方法可以从字符串值列表创建url:

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然后可以在操作环节中使用,例如:

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

我还没有检查,但它似乎工作。渲染路线链接怎么样?我想传递一个数组作为路由数据。有任何想法吗? – Sonia 2010-09-04 11:46:44

+0

我已经为帖子添加了一种方法。 – Jeroen 2010-09-04 15:32:57

+1

完美的作品!这是一个风格问题,而不是使用编写urlBuilder,我使用了string.Join(“/”,strArray)。谢谢 – Sonia 2010-09-05 17:39:07

1

对于这个问题您需要使用强类型urlBuilder。像T4MVC

+0

为什么会有帮助?你能给个例子吗? – Rup 2012-11-29 16:03:46