Если вы используете FormData
для отправки данных, вам нужно .append()
каждого человека имя / значение в FormData. Поскольку он является коллекцией, вы должны включить индексатор коллекции (который должен начинаться с нуля и быть последовательным), как показано ниже:
formData.append("obj[0].Field1", field1Val)
formData.append("obj[0].Field2", field2Val)
...
formData.append("obj[1].Field1", field1Val)
formData.append("obj[1].Field2", field2Val)
Поэтому обновите ваш код до следующего вида:
JS
<script>
$("#btn").click(function () {
function addItems(formdata, Items, name) {
for (var i = 0; i < Items.length; i++) {
addSingleItem(formdata, Items[i], name + "[" + i + "]");
}
}
function addSingleItem(formdata, item, name) {
for (var key in item) {
formdata.append(name + "." + key, item[key]);
}
}
var Names = $.makeArray();
var Briefs = $.makeArray();
Names.push({ LangCode: 'en', Value: 'TEST' });
Names.push({ LangCode: 'de', Value: 'TOST' });
Briefs.push({ LangCode: 'en', Value: 'FOO' });
Briefs.push({ LangCode: 'de', Value: 'BAR' });
var formData = new FormData();
formData.append("Id", productId);
formData.append("Tag", "SampleTag");
addItems(formData, Names, "Names");
addItems(formData, Briefs, "Briefs");
$.ajax({
type: 'PUT',
url: "/api/products/" + productId,
data: formData,
processData: false,
contentType: false,
success: function (data) {
alert("success!");
},
error: function (xhr, textStatus, error) {
var response = JSON.parse(xhr.responseText);
alert("error!");
}
});
});
</script>
Контроллер
[HttpPut("{id}")]
public async Task<IActionResult> PutProductLangs(int id, [FromForm]Product product)
{
return NoContent();
}