Передача списка объектов из представления в контроллер в asp.net mvc? - PullRequest
0 голосов
/ 26 марта 2010

Возможно ли это?
Что я хочу сделать, это передать список объектов в качестве параметра в actionlink
В тот момент, когда я пытаюсь это сделать, к моменту достижения контроллера список всегда пуст!

В представлении

 <%= Url.Action("ActionName", new { list = Model.ListOfObjects}) %>

В контроллере

public ActionResult ActionName(List<Object> list)
    {
        //Do stuff
    }

Ответы [ 3 ]

1 голос
/ 26 марта 2010

С точки зрения того, возможно это или нет - возможно, но не так, как вы пытаетесь. Имейте в виду, что это преобразуется в URL, который будет проанализирован MVC, и различные параметры будут переданы действию либо в виде прямых параметров, либо через механизм связывания модели.

Я бы порекомендовал вам попытаться выяснить, как должен выглядеть URL-адрес, а затем, возможно, сделать какой-нибудь специальный код для генерации URL-адреса (возможно, использовать специальный вспомогательный метод / метод расширения). Если вы комбинируете это с пользовательским механизмом подшивки, у вас должно получиться довольно элегантное решение, которое делает именно то, что вы хотите.

Например, если в вашем списке есть 3 объекта типа string, вы можете написать помощник для генерации URL-адреса, подобного этому (скажем, список содержит 'first', 'second' и 'third')

/ контроллер / действие? Obj1 = первый и второй obj2 = & obj3 = третий

Теперь вам просто нужно написать связыватель модели, который ищет записи с именами 'obj1', 'obj2' и т. Д., И просто добавить результаты в список.

0 голосов
/ 26 марта 2010

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

<% var values = new RouteValueDictionary();
   for (int i = 0; i < Model.ListOfObjects.Count -1; i++)
   {
      values.Add("list["+i+"]", Model.ListOfObjects[i]);
   }%>
<%= Url.Action("ActionName", values); %>

Действие будет знать, как обрабатывать список в контроллере.

0 голосов
/ 26 марта 2010

Хотя он может принимать список объектов, он, вероятно, не будет отображать то, что вы ожидаете увидеть; он может фактически всасывать значения класса списка (или любого другого класса, представленного в этом списке) и использовать его в качестве параметров.

Не через запрос get, если вы не записали параметры вручную и не десериализовали параметры. Или вместо этого выполните обратную передачу на сервер с этими значениями в форме; тогда это будет правильно заполнено.

НТН.

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