Как вы передаете массив объектов JSON в контроллер MVC? - PullRequest
1 голос
/ 13 февраля 2012

Я делаю ajax-вызов контроллеру и могу передать один элемент контроллеру, но не список элементов. В основном это работает:

$.ajax(
{
    url: "Inventory/Update",
    data: { ItemID: "1234", Quantity: 7 },
    datatype: "json"
});


public void Update(Item item)
{

}

Элемент заполняется в контроллере значениями 1234 и 7. Но когда я пытаюсь это сделать:

$.ajax(
{
    url: "Inventory/Update",
    data: [{ ItemID: "1234", Quantity: 7 }],
    datatype: "json"
});


public void Update(List<Item> items)
{

}

позиций - ноль.

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

Как передать этот массив объектов моему контроллеру MVC?

Ответы [ 5 ]

2 голосов
/ 16 февраля 2012

Проводка массивов как элемента FORM

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

Прочитайте мой подробный пост в блоге на эту тему.

Публикация сложных объектов JSON, не являющихся частью FORM

Я написал плагин jQuery , который может взять любой сложный объект JSON и преобразовать его, чтобы его можно было легко отправить обратно на сервер и правильно проанализировать в Asp.net MVC. Он не только преобразует объект, но и заботится о датах, поэтому они без проблем анализируются на сервере.

0 голосов
/ 01 октября 2012

Вы должны добавить contentType к функции ajax

$.ajax(
{
   url: "Inventory/Update",
   type:"post",
   contentType:"application/json",
   data: postData,
   datatype: "json"
});
0 голосов
/ 13 февраля 2012

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

$.ajax(
{
    "url": "Inventory/Update",
    "data": [{ "ItemID": "1234", "Quantity":"7" }],
    "datatype": "json"
});
0 голосов
/ 13 февраля 2012

попробуйте использовать это вместо:

   var itemArray = new Array();
   itemArray[0] = { ItemID: "1234", Quantity: 7 };
   var postData = { items: itemArray };
   $.ajax(
   {
       url: "Inventory/Update",
       data: postData,
       datatype: "json"
   });
0 голосов
/ 13 февраля 2012

Не уверен насчет поста ajax, но в случае отправки формы, вы должны визуализировать элементы управления, подобные этому

 <ul>
<% int i = 0; foreach (Student s in (IEnumerable)this.Model)
   {%>
<li>
    <%=Html.TextBox("student[" + i + "].Email")%>
    <%=Html.TextBox("student[" + i + "].Name")%>
</li>
<%i++;
   } %>

вам нужно установить итератор длясделать это в виде списка, выше будет создавать элементы управления с именем, как

student [0] .Email, student [0] .Name

student [1] .Email, student [1].Name

студент [2]. Электронная почта, студент [2]. Имя

и т. Д.

и на стороне контроллера

List<Student> modal 

будетполучите все опубликованные данные.

Попробуйте то же самое в своем посте ajax, надеюсь, эта помощь

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