我需要提交一份用户列表。 我有一个MVC控制器
[HttpPost]
public JsonResult Handler(List<User> users) {
...
}
用户
public class User {
public string name { get; set; }
public string email { get; set; }
}
JavaScript中的我通过jquery发送数组
var users = {};
for (var i = 0; i < 3; i++) {
users [i] = {
name: "User " + i,
email: "user" + i + "@test.net"
}
}
$.ajax({
type: "POST",
data: {
users: users
},
url: "http://test.net/order/handler",
success: callback
});
我得到包含3个项目的列表,但参数名称和电子邮件是NULL。
我哪里错了?
答案 0 :(得分:0)
您是否尝试将[FromBody]
添加到参数中?例如:
[HttpPost]
public JsonResult Handler([FromBody] List<User> users) {
...
}
设置ajax POST的ContentType以便ModelBinder知道要使用的内容也很重要:
$.ajax({
type: "POST",
data: {
users: users
},
url: "http://test.net/order/handler",
success: callback,
contentType: 'application/json'
});
另一件事:你可能正在做Cross-domain ajax post,这有几个含义。您可以考虑使用Fiddler查看您的请求的实际情况并发布更新,以便我们为您提供进一步的帮助。
答案 1 :(得分:0)
是不是因为您应该创建数组,然后将对象添加到其中:
var users = [];
for (var i = 0; i < 3; i++) {
var user = {
name: "User " + i,
email: "user" + i + "@test.net"
}
users[i] = user;
}
$.ajax({
type: "POST",
data: {
users: users
},
url: "http://test.net/order/handler",
success: callback
});
答案 2 :(得分:0)
首先,您需要设置有效的json数据:
var users = Array(), i;
for (i = 0; i < 3; i++) {
users[i] =
{
name: "User " + i,
email: "user" + i + "@test.net"
};
}
然后使用dataType json发送ajax请求:
$(document).ready(function() {
$.ajax({
type: "POST",
dataType: 'json',
data: {
users: users
},
url: "http://test.net/order/handler",
success: callback
});
});