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

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的身份发送,但这也没有帮助。我在服务器端使用ASP.NET MVC 5。

我究竟做错了什么?

编辑
我遇到的麻烦是尝试将对象列表推入formData(在这种情况下为用户)。如果我推一个布尔值,它将在服务器端反序列化正常。

最佳答案

将您的代码包装在$(document).ready(function(){ // code here });中,如下所示
,这将确保在加载DOM并处于就绪状态后,将执行包装的JavaScript。 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)

关于javascript - 添加到序列化数组中的复杂对象在服务器端始终为null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36891652/

10-12 12:19