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

Complex object added into serialized Array always null on server side

本文关键字:服务器端 null 对象 复杂 序列化 数组 添加      更新时间:2023-09-26

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

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

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; }
}

当调用命中服务器端控制器操作时,"用户"列表始终为空(计数为 0)。我尝试过字符串化并作为 Json 发送,但这也没有帮助。我在服务器端使用 MVC 5 ASP.NET。

我做错了什么?

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

代码包装为$(document).ready(function(){ // code here });,如下所示,它将确保包装的 JavaScript 将在 DOM 加载并处于就绪状态后执行。了解更多信息。

这是小提琴

$(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)