Я использую jQuery
для хранения некоторых данных в моей базе данных. Я использую приложение MVC 5
(ASP.NET
).
Отправляемые данные - это параметр id int
и массив объектов данных. При использовании $.post
для отправки данных на сервер все кажется работающим, однако при использовании варианта $.ajax
я получаю сообщение об ошибке с нулевым параметром, который не является обязательным.
Возможно, это как-то связано с опциями, которые я задаю в своем вызове ajax, хотя я не являюсь экспертом по JQuery или Javascript, поэтому я не совсем уверен.
2звонки:
Рабочий:
$.post("/Projects/InventorySaveChanges", { projectId: _projectId, data: JSON.stringify(data)}, function (data) {
if (data.Result) {
// Success code
}
else {
// Error code
}
}).error(function (a, b) {
// Error code
});
Не работает:
var obj = {};
obj.projectId = _projectId;
obj.data = JSON.stringify(data);
$.ajax({
url: '/Projects/InventorySaveChanges',
type: 'POST',
processData: false,
contentType: false,
data: obj,
success: function (data, status, jqxhr) {
// Success code
},
error: function (jqxhr, status, msg) {
// Error code
}
});
Конечная точка контроллера MVC:
[HttpPost]
public ActionResult InventorySaveChanges(int projectId, string data)
{
// .. Handle data
}
Использование вызова ajax
, как этот, на самом деле является дополнительным вопросом, помимо текущих данных, я также хочу сохранить файлы на сервере. Файлы хранятся в переменной jQuery следующим образом:
var _roomFileUploads = new FormData();
var file = $('#addPictureFile')[0].files[0];
_roomFileUploads.append(fileName + "|" + _editingRoom.Id, file);
Сначала я попытался отправить файлы в качестве параметров в функции $.post
:
$.post("/Projects/InventorySaveChanges", { projectId: _projectId, data: JSON.stringify(data), fileUpload: _roomFileUploads }, function (data) {
if (data.Result) {
// Success code
}
else {
// Error code
}
}).error(function (a, b) {
// Error code
});
Конечная точка MVC:
public ActionResult InventorySaveChanges(int projectId, string data, List<IFormFile> fileUpload = null)
{
// Handle data..
}
Интерфейс IFormFile
:
public interface IFormFile
{
string ContentType { get; }
string ContentDisposition { get; }
NameValueCollection Headers { get; }
long Length { get; }
string Name { get; }
string FileName { get; }
Stream OpenReadStream();
void CopyTo(Stream target);
Task CopyToAsync(Stream target, CancellationToken cancellationToken = default);
}
Приведенное выше сообщение вызывает следующую ошибку (при добавлении полей в качестве параметрак моей конечной точке):
Хотя я не уверен, что это способ отправки файлов на серверную часть. Я строю поверх старого кода, который я стараюсь сохранить (в основном) нетронутым, поэтому я пытаюсь отправить файлы в качестве параметра. Возможно, есть также способ включить файлы в объект массива данных? Или я должен добавить все данные параметров в переменную _roomFileUploads = new FormData()
и обработать их с помощью Request.Form
на стороне сервера?