添加到序列化数组中的复杂对象在服务器端始终为null

时间:2016-04-27 13:43:56

标签: javascript c# jquery ajax asp.net-mvc

我正在序列化表单数据并在其中添加额外的用户对象。

Jquery代码:

....
var users= getUsers();
var formData = $("#form").serializeArray();
formData.push({ name: 'Users', value: users});

$.ajax({
  url: "/ControllerName/ViewName",
  type: "POST",
  contentType: "application/x-www-form-urlencoded; charset=UTF-8"
  data: formData
});
....
function getUsers() {
  var users= [];
  users.push( new Object({
        Name: "User 1",
  }));


 return users;
}

C#Model

public class File
{
    public string Name { get; set; }

    public int Id { get; set; }

    public List<Users> Users { get; set; }

}

public class Users
{
    public string Name { get; set; }
}

当呼叫到达服务器端控制器操作时,“用户”列表始终为空(Count of 0)。我已经尝试过stringify并发送为Json,但这也没有帮助。我在服务器端使用ASP.NET MVC 5.

我做错了什么?

修改 我遇到的问题是尝试将对象列表推送到formData(在这种情况下是用户)。如果我按下一个布尔值,它会在服务器端反序列化。

1 个答案:

答案 0 :(得分:0)

将您的代码包含在$(document).ready(function(){ // code here });中,如下所示 ,它将确保包装的javascript将在DOM加载并处于就绪状态时执行。 for more info

这是fiddle

$(document).ready(function(){
    var users= getUsers();
    var formData = $("#form").serializeArray();
    formData.push({ name: 'Users', value: users});

    alert(JSON.stringify(formData));

    $.ajax({
      url: "/ControllerName/ViewName",
      type: "POST",
      data: JSON.stringify(formData)
    });
});

    function getUsers() {
      var users= [];
      users.push({Name: "User 1"});
      return users;
    }

修改
data: formData更改为data: JSON.stringify(formData)