2010-03-26 2 views
0

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

По мнению

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

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

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

Какой URL-адрес отображается? – SLaks

+0

/Controller/Object?list=System.Collections.Generic.List%601%5BObject%5D – Boob

+0

К сожалению, это должно быть /Controller/ActionName?list=System.Collections.Generic.List%601%5BObject%5D – Boob

ответ

0

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

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

HTH.

1

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

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

Например, если список состоит из 3 объектов типа строки, которую вы могли бы написать помощник для создания URL, как это (скажем, список содержит «первый», «второй» и «третий»)

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

Теперь вам нужно просто написать модель связующего, которая выглядит для записей, называемых «obj1», «obj2», и т.д., и просто добавить результаты в список.

0

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

<% 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); %> 

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

Смежные вопросы