首页 > 解决方案 > 有没有办法将数组元素添加到 formData 对象,所以 net core [FromForm] 会正确反序列化它们?

问题描述

所以,我正在使用 feth api 来发帖,而且通常效果很好。但是我有一个问题,比如说我有以下两种模型:

public class Contact
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Phone> Phones { get; set; }
}

public class Phone
{
    public string Number { get; set; }
    public string Model { get; set; }
}

现在,我想从 html 表单创建一个 formData 对象,它可以很好地添加字符串和整数。但是当我这样做时:

var data = new formData(document.querySelector('form'));

let arr = [{
    Number: "12345678"
},
{
    Number: "87654321"
}
];

data.append('Phones', JSON.stringify(arr)); 
//OR
data.append('Phones', JSON.stringify(arr[0]));
data.append('Phones', JSON.stringify(arr[1]));
//OR
data.append('Phones[]', JSON.stringify(arr[0]));
data.append('Phones[]', JSON.stringify(arr[1]));
//OR
data.append('Phones[0]', JSON.stringify(arr[0]));
data.append('Phones[1]', JSON.stringify(arr[1]));

然后发布到这样的东西:

[HttpPost]
public ActionResult SaveContact([FromForm]Contact contact)
{
    ...
}

该对象按其应有的方式绑定,具有正确的 Id、Name 值,但 Phones 不包含任何内容。有没有人在这里有一些意见,它让我发疯。谢谢!

标签: javascriptasp.net-coreasp.net-web-apifetch-api

解决方案


尝试将您的代码更改为以下形式:

let arr = ["123456","7895555"];

  formData.append('Phones[0].Number', arr[0]);
  formData.append('Phones[1].Number', arr[1]);

结果: 在此处输入图像描述


推荐阅读