首页 > 解决方案 > 无法通过 ajax 发布模型

问题描述

我正在使用Ajax制作模型并将其发送到控制器。

这是模型:

 public class PersonDto{
        public Guid Id { get; set; }
        public int PersonAge { get; set; }
        public string PersonName { get; set; }
        public DateTime? DateCreated { get; set; }
    }

这是控制器:

[Route("EditPerson")]
[HttpPost]
public async Task<IActionResult> EditPerson(PersonDto offer) {
  //Save to Entity FW
}

这是阿贾克斯:

var data = {
    Id: $('#personModal #personModalTitle').text(),
    PersonAge: $('#personModal #personId').val(),
    PersonName: $('#personModal #personName').val()
};

var dataJson = JSON.stringify(data);
console.log(dataJson);

$.ajax({
    type: 'POST',
    url: 'Persons/EditPerson',
    data: dataJson,
    contentType: "application/json",
    success: function (result) {

    },
    error: function (error) {
        Alert("Error Saving offer changes!");
    }
});

这是控制台日志(Json),一切看起来都很棒:

{"Id":"96f2ae80-45cc-4a6c-abe0-230c2cbd3043","PersonAge":"5","PersonName":"John"}

当我调试 PersonsController时,我看到我的模型从未填充,不为空,只是其中没有数据。

我尝试添加DateCreated到模型中我尝试在Ajax,我尝试将Age解析为 int。

我尝试将[FromBody]注释添加PersonDtoAction,然后我的模型得到NULL

我不知道我可以在哪里出错。

标签: c#asp.net-core

解决方案


对于 JSON 编码的 body ,只需添加一个[FromBody]

    [Route("EditPerson")]
    [HttpPost]
    public async Task<IActionResult> EditPerson([FromBody] PersonDto offer)
    {
        return new JsonResult(offer);
    }

更新 :

  1. 另一种方法是使用 a[ApiController]来装饰控制器类。

  2. 如果没有[ApiController],您应该添加一个[FromBody]以强制模型绑定器从 body 读取。

  3. 是否是 camelCased 或 pascalCased 有效载荷或不重要。没什么区别 。

骆驼香烟盒 :

POST https://localhost:44372/api/values/EditPerson HTTP/1.1 
Content-Type : application/json

{"id":"96f2ae80-45cc-4a6c-abe0-230c2cbd3043","personAge":"5","personName":"John"}

帕斯卡案例:

POST https://localhost:44372/api/values/EditPerson HTTP/1.1 
Content-Type : application/json

{"Id":"96f2ae80-45cc-4a6c-abe0-230c2cbd3043","PersonAge":"5","PersonName":"John"}

推荐阅读