Невозможно отправить данные массива, используя ajax с ASP. NET Core и Entity Framework Core - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь отправить массив в контроллер, но он пуст в параметре контроллера.

Ajax Функция:

$('#pending').click(function () {
    SaveTestResult("/Reception/PatientTests/SavePendingTest");
});

function SaveTestResult(url) {
    var pid = $('.patientId').attr('id');
    var tid = "";
    var tval = "";
    var tpid = "";
    var tests = [];

    $("table > tbody > tr").each(function () {
         testId = $(this).find('.tid').val();

         if (typeof (testId) != "undefined") {
             tid = testId;
         }

         var rowText = ""

         $(this).find('td').each(function () {
             tpid = $(this).find('.tpId').val();
             tval = $(this).find('.result').val();

             if (typeof (tpid) != "undefined") {
                 tests.push({ PatientId: pid, TestId: tid, TestParameterId: tpid, TestValue: tval });
             }
         });
     });

     // alert(JSON.stringify(tests));
     $.ajax({
                type: "POST",
                url: url,
                data: JSON.stringify(tests),
                contentType: "application/json",
                headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
                success: function (data) {
                    alert(data);
                },
                error: function (e) {
                    alert('Error' + JSON.stringify(e));
                }
    });
}

Это метод контроллера:

[HttpPost]
[Route("Reception/PatientTests/SavePendingTest")]
public async Task<IActionResult> SavePendingTest(List<PendingTestResult> pendingTestResult)
{
    if (ModelState.IsValid)
    {
        foreach (PendingTestResult ptr in pendingTestResult)
        {
            _db.Add(ptr);
            await _db.SaveChangesAsync();
        }

        // return new JsonResult("Index");
    }

    return new JsonResult(pendingTestResult); ;
}

Но при запуске кода я вижу массив данных заполненным, но внутри действия SavePendingTest, pendingTestResult пусто и не заполнено! Я также попробовал тег [FromBody] внутри параметров действия, но он тоже не работает!

Помогите мне решить эту проблему

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Вы можете передать список объектов следующим образом:

$.ajax({
    type: "POST",
    url: "Reception/PatientTests/SavePendingTest",
    data: { pendingTestResult: tests },

    headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
    success: function (data) {
        alert(data);
    },
    error: function (e) {
        alert('Error' + JSON.stringify(e));
    }
});

pendingTestResult в data:{ pendingTestResult: tests } соответствует имени параметра в действии и удаляет настройку contentType.

0 голосов
/ 10 апреля 2020

вы отправляете строку без имен, поэтому контроллер не может получить значения.

измените ваш код на

$.ajax({
type:"POST",
url:url,
data:test
...
});

test должен быть объект не строка .

...