有没有办法将数组元素添加到 formData 对象,因此 net core [FromForm] 将正确反序列化它们?
Is there a way to add array elements to a formData object, so net core [FromForm] will deserialize them correctly?
所以,我正在使用 feth api 来做 posts,而且通常效果很好。但是我有一个问题,假设我有以下两个模型:
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]));
然后 post 变成这样:
[HttpPost]
public ActionResult SaveContact([FromForm]Contact contact)
{
...
}
该对象已按预期绑定,具有正确的 Id、名称值,但 Phones 不包含任何内容。有没有人在这里提供一些意见,这让我发疯。谢谢!
尝试将您的代码更改为以下形式:
let arr = ["123456","7895555"];
formData.append('Phones[0].Number', arr[0]);
formData.append('Phones[1].Number', arr[1]);
结果:
包含复杂对象的数组类型属性
const fd = new FormData();
const phones = [
{ number: '123', model: 'model x' },
{ number: '456', model: 'model y' },
];
for (var i = 0; i < phones.length; i++) {
fd.append(`phones[][${i}][number]`, phones[i].number);
fd.append(`phones[][${i}][model]`, phones[i].model);
}
所以,我正在使用 feth api 来做 posts,而且通常效果很好。但是我有一个问题,假设我有以下两个模型:
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]));
然后 post 变成这样:
[HttpPost]
public ActionResult SaveContact([FromForm]Contact contact)
{
...
}
该对象已按预期绑定,具有正确的 Id、名称值,但 Phones 不包含任何内容。有没有人在这里提供一些意见,这让我发疯。谢谢!
尝试将您的代码更改为以下形式:
let arr = ["123456","7895555"];
formData.append('Phones[0].Number', arr[0]);
formData.append('Phones[1].Number', arr[1]);
结果:
包含复杂对象的数组类型属性
const fd = new FormData();
const phones = [
{ number: '123', model: 'model x' },
{ number: '456', model: 'model y' },
];
for (var i = 0; i < phones.length; i++) {
fd.append(`phones[][${i}][number]`, phones[i].number);
fd.append(`phones[][${i}][model]`, phones[i].model);
}