Массив параметров ASP.NET MVC 2 - PullRequest
       7

Массив параметров ASP.NET MVC 2

8 голосов
/ 03 сентября 2010

Мне нужна следующая логика маршрутизации:

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

Я не знаю, какова глубина маршрута, поэтому я хочу, чтобы действиеподпись выглядит примерно так:

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

Понятия не имею, как написать этот маршрут.Помощь?

Большое спасибо.

Ответы [ 2 ]

15 голосов
/ 03 сентября 2010

При добавлении следующего сопоставления:

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

вы можете получить строку 'url' в вашем методе действия:

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

Тогда легко получить иерархию:

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

Создание URL-адреса из списка строковых значений можно выполнить с использованием подхода similair:

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() }) %>
1 голос
/ 28 ноября 2012

для этой проблемы вам нужно использовать строго типизированный urlBuilder.Нравится T4MVC

...