【问题标题】:Submit a list of objects from JS to MVC从 JS 提交对象列表到 MVC
【发布时间】:2014-08-19 09:41:42
【问题描述】:

我需要提交用户列表。 我有一个 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 个项目的列表,但参数 name 和 email 为 NULL。

我哪里错了?

【问题讨论】:

  • 您如何尝试访问生成的users 变量中的数据?
  • 您的班级名称是“用户”,但您列表中的类型是 List(即带有 s)。
  • 使用 json.stringify(users)..
  • @Exception:嗯,不。在使用 jQuery 的 ajax 时,您不需要(或者更确切地说,不应该)这样做。
  • 致 Routeburn:我只是打错了。固定。

标签: jquery arrays ajax asp.net-mvc


【解决方案1】:

难道不是因为你应该创建一个 array 然后将 objects 添加到它:

    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 行,完全一样。
【解决方案2】:

您是否尝试将[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 查看您的请求的实际情况并发布更新,以便我们进一步帮助您。

【讨论】:

    【解决方案3】:

    首先需要设置有效的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
        });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多