如何将一组JSON对象传递给MVC控制器?

时间:2012-02-13 06:52:13

标签: javascript ajax asp.net-mvc json

我正在对控制器进行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,正如其他帖子中所建议的那样,但这并没有什么不同。

如何将这个对象数组传递给我的MVC控制器?

5 个答案:

答案 0 :(得分:2)

将数组作为FORM元素

的一部分发布

当生成具有任意数量的某些元素(将成为同一数组的一部分)的FORM时,并不复杂。您所要做的就是处理连续索引并更正输入名称。

请阅读关于此主题的detailed blog post

发布不属于FORM

的复杂JSON对象

我写了一个jQuery plugin,可以接受任何复杂的JSON对象并对其进行转换,以便轻松地将其发送回服务器并由Asp.net MVC正确解析。它不仅可以转换对象,还可以处理日期,因此可以在服务器上正确解析它们而不会出现任何问题。

答案 1 :(得分:0)

不确定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++;
   } %>

你需要设置一个迭代器来使它以列表形式出现,上面的命令将使控件的名称如

学生[0] .Email, 学生[0]请将.Name

学生[1] .Email, 学生[1]请将.Name

学生[2] .Email, 学生[2] .Name

等等

并在控制器端

List<Student> modal 

将获取所有发布的数据。

在你的ajax帖子中尝试一些相同的东西,希望这个帮助

答案 2 :(得分:0)

这可能看起来很奇怪,但您可以尝试在数据字典中添加引号,例如:

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

答案 3 :(得分:0)

尝试使用此代码:

   var itemArray = new Array();
   itemArray[0] = { ItemID: "1234", Quantity: 7 };
   var postData = { items: itemArray };
   $.ajax(
   {
       url: "Inventory/Update",
       data: postData,
       datatype: "json"
   });

答案 4 :(得分:0)

您应该将contentType添加到ajax函数

$.ajax(
{
   url: "Inventory/Update",
   type:"post",
   contentType:"application/json",
   data: postData,
   datatype: "json"
});