我正在对控制器进行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控制器?
答案 0 :(得分:2)
FORM
元素当生成具有任意数量的某些元素(将成为同一数组的一部分)的FORM
时,并不复杂。您所要做的就是处理连续索引并更正输入名称。
请阅读关于此主题的detailed blog post。
FORM
我写了一个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"
});