Передать коллекцию перечислений в ASP.NET MVC ActionMethod - PullRequest
1 голос
/ 20 октября 2010

Есть ли способ автоматически передать коллекцию Enums в ActionMethod (в GET)?

Например, если у меня есть следующее определение перечисления:

enum DaysEnum {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

и у меня есть определение ActionMethod:

ActionResult SampleActionMethod ( List<DaysEnum> days)

Есть ли способ отобразить в представлении URL-адрес, который передается в коллекцию DayEnums. Что-то вроде:

var someDays = new List<DaysEnum> {DaysEnum.Sat, DaysEnum.Sun, DaysEnum.Mon};

Url.Route(new { days = someDays, controller="whatever", action="SampleActionMethod"});

Связыватель модели по умолчанию, кажется, не поддерживает это, так как в настоящее время я получаю следующее:

http://.../System.Collections.Generic.List`1[DaysEnum]

Я знаю, что могу сделать это, вручную сгладив коллекцию, скажем, строкой, разделенной тире, и затем заново создать коллекцию в ActionMethod, но я искал что-то более элегантное. В различных блогах публикациях говорится о передаче коллекций, но это больше относится к работе над сообщениями.

Ответы [ 3 ]

2 голосов
/ 20 октября 2010

Мы делаем это с помощью пользовательского связывателя модели для параметра контроллера и метода расширения для формирования параметра в URL.

Связыватель модели выглядит так:Затем в вашем методе контроллера вы подключаете связыватель следующим образом:

ActionResult MyMethod([ModelBinder(typeof(DaysEnumModelBinder))] DaysEnum[] days)
{
    ...
}

Наконец, в вашем представлении визуализируйте URL с чем-то вроде string.Join(",", days.Select(d => d.ToString())).

1 голос
/ 20 октября 2010
<%= Html.ActionLink("test enums", "SampleActionMethod", new RouteValueDictionary { 
    { "days[0]", DaysEnum.Sun }, { "days[1]", DaysEnum.Mon } 
}) %>
0 голосов
/ 20 октября 2010

я боюсь, что сложные типы данных не могут быть перенесены с GET-запросом.Вы можете использовать некоторые скрытые значения и опубликовать данные, если хотите отправить эти значения как коллекцию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...