提交从JS到MVC的对象列表

时间:2014-08-19 09:41:43

标签: jquery arrays ajax asp.net-mvc

我需要提交一份用户列表。 我有一个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。

我哪里错了?

3 个答案:

答案 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
    });
});