В ASP.NET MVC 2 можно ли десериализовать строку запроса в массив, используя ModelBinder по умолчанию? - PullRequest
4 голосов
/ 09 декабря 2010

В ASP.NET MVC 2 вы можете использовать этот URL и этот метод контроллера:

GET http://server/controller/get?id=5

public ActionResult Get(int id)
{
    ...
}

И ModelBinder преобразует строку запроса id=5 в id = (int) 5 в параметре метода. Однако это не сработает:

GET http://server/controller/get?idlist=1,2,3,4,5

public ActionResult Get(int[] idlist)
{
    ...
}

idlist будет нулевым в параметре. Хотя разбор этого довольно тривиален, мне было интересно, есть ли способ изменить сигнатуру метода или строку запроса, чтобы заставить ModelBinder по умолчанию автоматически десериализовать массивы / коллекции?

Ответы [ 3 ]

8 голосов
/ 09 декабря 2010

При использовании связывателя моделей по умолчанию, URL должен быть

http://server/controller/get?idlist=1&idlist=2&idlist=3&idlist=4&idlist=5

или

http://server/controller/get?idlist[]=1&idlist[]=2&idlist[]=3&idlist[]=4&idlist[]=5

Если вы действительно хотите использовать idlist = 1,2,3,4,5, выдолжен иметь свой собственный связующий материал

0 голосов
/ 30 июня 2011

Это немного поздно для вечеринки, но я хотел сделать то же самое.

Вы можете передать одну строку как {1,2}, и связыватель свяжет ее с массивом, например

<input name="idlist" type="text" value="{163,162}">
0 голосов
/ 09 декабря 2010

Вот что я думаю:

public ActionResult Get(int id)
{
   ...
}

Следует использовать как

GET http://server/controller/get/5

И список может быть просто разделен запятой (,)

...