Javascript 添加到序列化数组中的复杂对象在服务器端始终为空
我正在序列化表单数据并向其中添加一个额外的用户对象 Jquery代码: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-
....
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;
}