【发布时间】:2018-08-24 09:21:02
【问题描述】:
我正在使用 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 我看到我的模型从未填充,不为空,只是其中没有数据。
我尝试在 Ajax 函数中将 DateCreated 添加到模型中,我尝试将 Age 解析为 int。
我尝试在 Action 中将 [FromBody] 注释添加到 PersonDto,然后将 NULL 添加到我的模型中。
我不知道我可以在哪里出错。
【问题讨论】:
-
InstallerId在PersonDtopoco 中不存在。 -
默认情况下,aspnet 核心需要驼峰式属性(除非您配置您的 api 以接受其他方式)。因此它可能期待
{ "id": ..., "personAge":..., "personName":...}而不是{ "Id": ..., "PersonAge":..., "PersonName":...}。 -
@DanielShillcock 我改变了,我从不同的答案复制了 ajax 并改变了它。这是我的代码中的 ajax。
-
@gerryc.inc 我更改了,结果相同:现在是 Json:{"id":"2e454721-99c5-47b7-abfa-f2e410cccaaa","personAge":"57"," personName":"约翰雪"}
-
我复制了你的代码,当我执行
camelCase属性时,它可以工作,在操作参数上使用[FromBody]属性,并在我的请求中设置'Accept': 'applicaiton/json'标头。
标签: c# asp.net-core