Ajax-запрос публикует 0 или ноль - PullRequest
0 голосов
/ 05 декабря 2018

Не могу понять этот простой вызов ajax.Контроллер успешно возвращает файл json, как и положено, но регистрирует два нуля как значения для страны и суммы, которые являются неверными.Что я тут не так делаю?

контроллер:

[HttpPost("search")]
public IActionResult test(int country, int amount)
{
    System.Console.WriteLine(country);
    System.Console.WriteLine(amount);
    return Json("success : true");
}

jQuery:

var data = "{ 'country': 2, 'amount': 4}";

$.ajax({
    url: "search",
    type: "POST",
    data: data,
    cache: false,
    contentType: "application/json",
    success: function (data) {
        alert("hi"+ data);
    }
});

Ответы [ 4 ]

0 голосов
/ 05 декабря 2018

Создайте модель для хранения желаемых значений

public class TestModel {
    public int country { get; set; }
    public decimal amount { get; set; }
}

Обновите действие, чтобы ожидать данные в теле запроса, используя атрибут [FromBody]

[HttpPost("search")]
public IActionResult test([FromBody]TestModel model) {
    if(ModelState.IsValid) {
        var country = model.country;
        var amount = model.amount;
        System.Console.WriteLine(country);
        System.Console.WriteLine(amount);
        return Ok( new { success = true });
    }
    return BadRequest(ModelState);
}

На стороне клиента вынеобходимо убедиться, что данные отправляются в правильном формате

var data = { country: 2, amount: 4.02 };

$.ajax({
    url: "search",
    type: "POST",
    dataType: 'json',
    data: JSON.stringify(data),
    cache: false,
    contentType: "application/json",
    success: function (data) {
        alert("hi"+ data);
    }
});

Ссылка Привязка модели в ASP.NET Core

0 голосов
/ 05 декабря 2018
  1. Вы должны использовать JSON.stringify для преобразования объекта в строку json.Не пытайтесь использовать конкатенацию строк для этого.
  2. Ваши типы для суммы не соответствуют тому, что вы отправляете.Тип денег, вероятно, должен быть decimal в c #.
  3. Вернуть также анонимный объект из метода c # и передать его в Json.
  4. Тип содержимого неправильный, см.также Каков правильный тип содержимого JSON?
[HttpPost("search")]
public IActionResult test(int country, decimal amount)
{
    System.Console.WriteLine(country);
    System.Console.WriteLine(amount);
    // return an anymous object instead of a string
    return Json(new {Success = true});
}

jQuery:

var data = JSON.stringify({country: 2, amount: 4.02});

$.ajax({
    url: "search",
    type: "POST",
    dataType: 'json',
    data: data,
    cache: false,
    contentType: "application/json",
    success: function (data) {
        alert("hi"+ data);
    }
});
0 голосов
/ 05 декабря 2018

Спасибо всем!Работает с вашей помощью.

После удаления [FromBody]

 [HttpPost("search")]
        public IActionResult test([FromBody] string data)
        {
            System.Console.WriteLine(data);
            return Json(new {Success = true});
        }

jQuery:

var data = JSON.stringify("{ 'data': 'THOMAS' }");

    $.ajax({
        url: "search",
        type: "POST",
        data: data,
        cache: false,
        contentType: "application/json",
        success: function (data) {
            alert("hi"+ data);
        }
    });
не будет работать
0 голосов
/ 05 декабря 2018

Что я здесь не так делаю?

dataType не требуется, поэтому вы можете пропустить это.

4.02 не int, поэтомувы, вероятно, должны заменить это на decimal

и contentType должно быть application/json

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