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

Javascript 添加到序列化数组中的复杂对象在服务器端始终为空,javascript,c#,jquery,ajax,asp.net-mvc,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-

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

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#模型

公共类文件
{
公共字符串名称{get;set;}
公共int Id{get;set;}
公共列表用户{get;set;}
}
公共类用户
{
公共字符串名称{get;set;}
}
当调用点击服务器端控制器操作时,用户列表始终为空(计数为0)。我尝试过stringify并将其作为Json发送,但也没有任何帮助。我在服务器端使用ASP.NETMVC5

我做错了什么

编辑 我遇到的问题是试图将对象列表推送到formData中(在本例中是用户)。如果我推一个布尔值,它会在服务器端进行反序列化。

将代码包装在
$(document).ready(function(){//code here})如下所示
,它将确保加载DOM并处于就绪状态后将执行封装的javascript

这是

编辑

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

尝试在传递给
$.ajax
的args对象上设置
contentType
属性。此外,在
getUsers
函数中,您不必执行
新对象
只需执行
users.push({Name:“User 1})
@MichaelL。我使用的内容类型是“application/x-www-form-urlencoded”。我将更新示例。请尝试将
数据:formData
更改为
数据:$.param(formData)
。请参阅:另外,对象
{Name:“User 1”}
将序列化为
User+1=
。您可能想将对象更改为
{name:“name”,value:“User 1”}
您可以通过解释
$(document).ready()
是什么以及它将如何帮助他来改进您的答案。字符串化数据会使服务器端的所有值为空。我有$(document).ready(),只是忘了将其包含在示例中。
data:JSON.stringify(formData)
希望这有帮助-
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; }
}
$(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;
    }