ajax PUT не передает массив - PullRequest
2 голосов
/ 25 марта 2019

Я использую javascript на своей веб-странице для отправки GUID (параметр url) + массив GUID в веб-службу.Но когда я пытаюсь отправить массив GUID, параметр остается пустым каждый раз.

мой Javascript выглядит так:

//Save Button is clicked
function saveBtnClicked() {
    var currentDataSetGuid = $("#currentDataSetGuid").val();
    var Table = $("#Table").find("tbody").first();
    var selectedElements = Table.find("input:checked");
    var saveGuidArray = new Array();
    var i = 0;
    while (i < selectedElements.length) {
        var trid = selectedElements[i].parentElement.parentElement.id;
        saveGuidArray.push(trid);
        i = i + 1;
    }

    putSave(currentDataSetGuid,saveGuidArray)
}

//Save action to call the controller
function putSave(currentDataSetGuid, saveGuidArray) {
    $.ajax({
        dataType: "json",
        cache: false,
        method: "PUT",
        url: "/api/myAPP/SaveEndpoint/" + currentDataSetGuid,
        contentType: "application/json",
        data: JSON.stringify({ paramName: saveGuidArray}),
        success: function (result) {
            showSuccess("Save was successfull");
        },
        error: function (error) {
            showError("Error while saving");
        }
    });
}

Я тоже пытался - но с тем же результатом:

data: JSON.stringify(saveGuidArray),

А вот моя реализация интерфейса контроллера (C #)

    [HttpPut]
    [Route("/api/myAPP/SaveEndpoint/{currentDataSetGuid}")]
    public IActionResult SaveAction(Guid currentDataSetGuid, List<Guid> saveGuidArray)

В моем контроллере currentDataSetGuid каждый раз устанавливается правильно.Но saveGuidArray пуст / не имеет элементов.

Ответы [ 2 ]

2 голосов
/ 25 марта 2019

Я исправил ошибку сейчас. Проблема была в простом типе данных как HTTP Body.

Я добавил новый класс и соответственно реализовал контроллер.

[HttpPut]
[Route("/api/myAPP/SaveEndpoint/{currentDataSetGuid}")]
public IActionResult SaveAction(Guid currentDataSetGuid, [FromBody] ViewSaveGuid saveGuidArray)

И затем я настраиваю объект в JavaScript, чтобы передать его как JSON.Stringify

var GuidList{
   array: saveGuidArray
};
[...]
data: JSON.stringify(GuidList);
0 голосов
/ 25 марта 2019

Если ваше действие определено так:

[HttpPut]
[Route("/api/myAPP/SaveEndpoint/{currentDataSetGuid}")]
public IActionResult SaveAction(Guid currentDataSetGuid, [FromBody]List<Guid> saveGuidArray)

Тогда ваш запрос Ajax должен быть отформатирован следующим образом:

function putSave(currentDataSetGuid, saveGuidArray) {
  if (!currentDataSetGuid || !saveGuidArray) {
    console.log('Error');
    // Handle validation
    return;
  }

  $.ajax({
      dataType: "json",
      cache: false,
      method: "PUT",
      url: "/api/myAPP/SaveEndpoint/" + currentDataSetGuid,
      contentType: "application/json",
      data: JSON.stringify({ saveGuidArray }), // Take note of the difference on this line.
      success: function (result) {
          showSuccess("Save was successfull");
      },
      error: function (error) {
          showError("Error while saving");
      }
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...