有一个简单的ajax POST 请求,必须stringify 一个简单的类并将其传递到POST 请求的正文中,但是服务器端的Person 参数有空(默认)值
// javascript
var person = { "FirstName": "Andrew", "LastName": "Lock", "Age": "31" };
$.ajax({
type: "POST",
url: "/UpdatePostBody?handler=Abc",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify(person),
headers: {
RequestVerificationToken:
$('input:hidden[name="__RequestVerificationToken"]').val()
},
})
.done(function (result) {
console.log(result);
});
// C# code
public IActionResult OnPostAbc(Person person)
{
return new JsonResult("my result");
}
在服务器端,有一个简单的 ASP.NET Core Razor 页面,其中包含一个被命中并返回结果但 person 参数成员没有值的方法。
最佳答案
你的 Pesron 数据是空的是因为你的 Age
在类 Person
是 int 类型。而你的人在 { "FirstName ": "Andrew", "LastName": "Lock", "Age": "31"}
是string类型,所以获取不到。另外,当你传递json数据时从ajax到handler,你需要在handler中添加[FromBody]
。这是一个演示:
cshtml:
<button onclick="postdata()">Abc</button>
function postdata() {
//change Age type to int
var person = { "FirstName": "Andrew", "LastName": "Lock", "Age": 31 };
$.ajax({
type: "POST",
url: "/UpdatePostBody?handler=Abc",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify(person),
headers: {
RequestVerificationToken:
$('input:hidden[name="__RequestVerificationToken"]').val()
},
})
.done(function (result) {
console.log(result);
});
}
cshtml.cs:
public IActionResult OnPostAbc([FromBody]Person person)
{
return new JsonResult("my result");
}
关于ajax - ASP.NET Core Razor ajax POST 请求数据对象为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66317436/