Значения массива теряются от JS к контроллеру - PullRequest
1 голос
/ 07 ноября 2019

Я пытаюсь передать значения массива из моего JavaScript в мой контроллер C #. Я использую console.log ();и убедитесь, что на стороне JavaScript значения точно соответствуют ожидаемым.

Однако, когда я добавляю точку останова на стороне контроллера (C #) - он показывает мне, что updateData: Count = 0. Почему япереход от JavaScript с результатами к C # без результатов?

$('#UpdateDB').click(function () {
    console.log(JSON.stringify({ updateData: updateData }));
    $.ajax('https://localhost:44328/api/DBUpdate', {
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        data: { updateData: updateData },
        dataType: "json",
        success: function (r) {
            alert("save successfully!");
        }
    });
});
[Route("api/DBUpdate")]
public ActionResult UpdateDB(List<TLSModel> updateData)
{
    return Json(new { status = "success", message = "Records saved successfully" });
}

РЕДАКТИРОВАТЬ
Вот как выглядит моя TLSModel

public class TLSModel
{
  [Key]
  public int ID { get; set; }
  public double StoreNumber { get; set; }
  public string StoreName { get; set; }
  public bool ActiveStore { get; set; }
}

Ответы [ 4 ]

1 голос
/ 09 ноября 2019

Проблема в том, что связыватель модели ожидает список, тогда как, просматривая ваши комментарии, вы отправляете объект, у которого есть свойство, представляющее собой список. Отправьте только массив, и он будет работать.

Вот пример, который работает.

var updateData = [{ storeNumber: "2059", activeStore: false }, { storeNumber: "2005", activeStore: false }];

$('#UpdateDB').click(function () {      
    $.ajax('https://localhost:44328/api/DBUpdate', {
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(updateData),
        dataType: "json",
        success: function (r) {
            alert("save successfully!");
        }
    });
});
0 голосов
/ 08 ноября 2019

Вы подтвердили, что updateData - это массив в JS?

В противном случае попробуйте в своем посте ajax

data: { updateData: [updateData] }
0 голосов
/ 08 ноября 2019

Возможно, это поможет:

https://dotnetfiddle.net/cGay3Y

Хотя я заметил, что объект массива в моем примере выглядит следующим образом:

[{"storeNumber":"2059","activeStore":false},{"storeNumber":"2059","activeStore":false}]
0 голосов
/ 08 ноября 2019

Попробуйте проверить тип данных для параметра этой функции:

public ActionResult UpdateDB(List<TLSModel> updateData)

List<TLSModel> может не соответствовать / отображаться правильно модели, которую вы передаете в C #.

Попробуйте Array<TLSModel>

Если в коде C # действительно достигнута точка останова, маршрут в порядке, так что это хорошее начало.

Я бы попробовал проверить, можно ли передать этот объект updateDataв ЛЮБУЮ функцию контроллера, а затем посмотрите, что произойдет, если вы передадите просто строку в ЛЮБУЮ функцию контроллера, которая может помочь сузить круг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...