Как отправить массив с formdata в ajax-запросе к действию mvc
Я пытался отправить массив с данными формы в действие с Ajax-запросом, но всякий раз, когда я получаю, я получаю как данные формы, так и массив пустой
$scope.SubmitForm = function () {
var sLangs = $("#supportedLanguages").data("kendoMultiSelect").value();
var formdata = new FormData($('#frmAppSettings').get(0));
alert(formdata.SelectedLanguages);
var data = new FormData(document.getElementById("frmAppSettings"));
$.ajax({
type: "POST",
url: "/AppMenuMaker/AppSettings",
data: JSON.stringify({ AppSettingsView: formdata, SelectedLangs: sLangs }),
processData: false,
contentType: false,
success: function () {
}
});
}`
У меня есть следующие действия
[HttpPost]
[Authorize]
public ActionResult AppSettings( ApplicationSettingsViewModel AppSettingsView, int[] SelectedLangs)
{
}
Любая помощь?
1 ответ
Решение
FormData
представляет собой набор пар имя / значение, представляющих элементы управления формы и их значения, и отправляется как multipart/form-data
, Ты не можешь stringify()
это и / или отправить его с отдельными объектами. Вам нужно добавить к нему пары имя / значение.
Если элемент с id="supportedLanguages"
находится внутри формы с id="frmAppSettings"
тогда твой код
var formdata = new FormData($('#frmAppSettings').get(0));
правильно добавит значения <select>
к FormData
объект. Если нет, то вам нужно добавить каждое значение в массив, например
var formdata = new FormData($('#frmAppSettings').get(0));
$.each($("#supportedLanguages").val(), function(index, item) {
formdata .append('SelectedLangs', item);
});
и тогда параметры ajax должны быть
$.ajax({
type: "POST",
url: '@Url.Action("AppSettings", "AppMenuMaker")', // use @Url.Action() to generate your url's
data: formdata,
processData: false,
contentType: false,
success: function () {
}
});