Возникли проблемы при передаче сложной модели на контроллер через ajax вызов - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь обновить свою модель при каждом нажатии кнопки. Когда я регистрирую данные, которые отправляю в файл бритвы на консоль, все данные там. Однако при вызове метода контроллера модель пуста.

Мой метод onclick:

function addCoupon() {
  var code = document.getElementById("coupon-entry").value;
  $.ajax({ // Validate coupon first. This is working.
    method: "post",
    url: `/cart/validate-coupon/` + code,
    contentType: "application/json; charset=utf-8"
  }).done(result => {
    if (result.success) {
      var model = @Html.Raw(Json.Serialize(Model));
      console.log(model); // Countries and CheckoutData are correct here
      $.ajax({
        method: "post",
        url: `/cart/add-coupon/` + code,
        contentType: "application/json; charset=utf-8",
        data: model
      }).done(result => {
        console.log("It worked");
      });
    }
  });
}

Моя модель:

public bool IsPos { get; set; }
public List<CountryDto> Countries { get; set; }
public CheckoutData CheckoutData { get; set; }
public string Payment ProcessorError { get; set; }
public bool DisplayRequiredErrors { get; set; }
public List<string> ValidationErrors { get; set; } = new List<string>();
public PaymentInformationModel PaymentInformation { get; set; } = new PaymentInformationModel();
public bool UseSavedCard { get; set; }

Мой контроллер:

[HttpPost("add-coupon/{code}")]
public async Task<IActionResult> AddCouponAsync(string code, CheckoutModel model)
{
  // Countries and CheckoutData are null here
}

Здесь было несколько похожих вопросов, но у них у всех были либо простые модели, либо были решения, которые не работали для меня, когда я их пробовал.

Спасибо!

1 Ответ

0 голосов
/ 04 мая 2020

Вы должны попытаться изменить его на это (в противном случае оно недопустимо javascript):

(обратите внимание, что его необходимо заключить в '')

var model = '@Html.Raw(Json.Serialize(Model))';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...