Ajax呼叫发布0或null

时间:2018-12-04 21:52:13

标签: c# json asp.net-core asp.net-core-mvc

无法弄清楚这个简单的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 :(得分:3)

创建一个模型以保存所需的值

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);
    }
});

引用Model Binding in ASP.NET Core

答案 1 :(得分:2)

  1. 您应该使用JSON.stringify将对象转换为json字符串。请勿尝试使用字符串串联来做到这一点。
  2. 您的金额类型与您要发送的内容不匹配。货币类型在c#中应该为decimal
  3. 也从c#方法中返回一个匿名对象,并将其传递给Json
  4. 内容类型不正确,另请参见What is the correct JSON content type?
[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);
    }
});

答案 2 :(得分:1)

  

我在这里做什么错了?

4.02不是必需的,因此您可以忽略它。

int不是decimal,因此您应该将其替换为contentType

application/json应该是=IMPORTXML(A1, "//*[local-name()='BusinessNameLine1Txt']")

答案 3 :(得分:0)

谢谢大家!在您的帮助下可以正常工作。

删除[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);
        }
    });