Использование List в качестве параметра строки запроса с использованием MVC - PullRequest
4 голосов
/ 26 августа 2010

У меня есть метод действия, который выглядит следующим образом:

public ActionResult DoSomething(string par, IEnumerable<string> mystrings)

Я хотел сопоставить это с URL-адресом, используя Url.Action, передавая mystrings в RouteValueDictionary. Однако это приводит только к строке запроса, которая соответствует только mystrings.ToString ().

Как я могу передать список в строке запроса? Есть ли какая-то функциональность в MVC 2, которая поддерживает это?

Уточнение: метод действия вызывается с помощью GET, а не POST.

У моего метода действия нет проблем с анализом строки запроса DoSomething? Mystrings = aaa & mystrings = bbb

Однако я не могу сгенерировать это с помощью Url.Action. При передаче списка генерируется следующая строка запроса: mystrings = system.collections.generic.list% 601% 5bsystem.string% 5d

Есть ли способ, которым я мог бы сделать это легко?

Ответы [ 2 ]

2 голосов
/ 26 августа 2010

Да. привязка модели к списку

РЕДАКТИРОВАТЬ: Хорошо, теперь я вижу, куда вы идете с этим.Я не думаю, что ASP.NET MVC имеет такую ​​встроенную функцию, поскольку она предназначена для генерации строк запроса из значений маршрута, которые имеют уникальные имена.Возможно, вам придется свернуть свой собственный.Я бы создал метод расширения для IEnumerable<String>, например, так:

public static class Extensions
{
    public static string ToQueryString(this IEnumerable<string> items)
    {
        return items.Aggregate("", (curr, next) => curr + "mystring=" + next + "&");
    }
}

. Затем вы можете сгенерировать свою собственную строку запроса, например:

<%= Url.Action("DoSomething?" + Model.Data.ToQueryString()) %>

Это требует некоторой полировки, как вы должны UrlEncodeваши строки, и это создает конечный "&", но это должно дать вам основную идею.

1 голос
/ 27 августа 2010

Как насчет:

<%: Html.ActionLink("foo", "DoSomething", new RouteValueDictionary() { 
    { "mystrings[0]", "aaa" }, { "mystrings[1]", "bbb" } 
}) %>

, который генерирует:

<a href="/Home/DoSomething?mystrings%5B0%5D=aaa&amp;mystrings%5B1%5D=bbb">foo</a>

Это не совсем тот URL, который вы искали, но он будет успешно привязан к вашему действию контроллера. Если вы хотите сгенерировать URL-адрес без квадратных скобок, вам нужно использовать собственный вспомогательный метод.

...