Отправка параметризованных данных на сервер (ASP.NET) с использованием jQuery, работа с $ .post, но без использования $ .ajax - PullRequest
0 голосов
/ 01 октября 2019

Я использую 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);
}

Приведенное выше сообщение вызывает следующую ошибку (при добавлении полей в качестве параметрак моей конечной точке):

enter image description here

Хотя я не уверен, что это способ отправки файлов на серверную часть. Я строю поверх старого кода, который я стараюсь сохранить (в основном) нетронутым, поэтому я пытаюсь отправить файлы в качестве параметра. Возможно, есть также способ включить файлы в объект массива данных? Или я должен добавить все данные параметров в переменную _roomFileUploads = new FormData() и обработать их с помощью Request.Form на стороне сервера?

1 Ответ

1 голос
/ 01 октября 2019

РЕДАКТИРОВАТЬ

Код изменен для нескольких файлов.

var obj= new FormData();
obj.append("projectId", 1);
obj.append("data", data);

for (var i = 0; i < $('#file')[0].files.length; i++) {
     model.append("fileUpload", $('#file')[0].files[i]);
}

$.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
    }
});

Код контроллера.

public ActionResult InventorySaveChanges(int projectId, string data, List<HttpPostedFileBase> fileUpload = null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...