在Asp.Net Core Razor Page中,如果PUT处理程序的模型绑定器无法绑定来自JavaScript的序列化表单,可能是由于以下原因:
请求的Content-Type不正确:确保请求的Content-Type为"application/json",以便让模型绑定器正确地解析JSON数据。
JavaScript序列化表单的格式不正确:确保JavaScript序列化表单的数据格式正确,并与模型属性的命名一致。
以下是一个解决方法的代码示例:
在Razor Page的PUT处理程序中,首先添加[FromBody]属性来显式指定使用FromBody模型绑定器进行绑定。然后,确保JavaScript序列化表单的数据格式正确,并与模型属性的命名一致。
public class MyModel
{
public string Property1 { get; set; }
public int Property2 { get; set; }
}
public class MyPageModel : PageModel
{
[BindProperty]
public MyModel Model { get; set; }
public IActionResult OnPut([FromBody] MyModel model)
{
// 处理PUT请求
// ...
return Page();
}
}
在JavaScript中,使用fetch API或axios等库发送PUT请求,并将表单数据作为JSON字符串传递给服务器。
const data = {
Property1: "value1",
Property2: 123
};
fetch('/MyPage', {
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
})
.then(response => {
// 处理响应
})
.catch(error => {
// 处理错误
});
确保在JavaScript中正确设置请求的Content-Type为"application/json",并将表单数据正确地序列化为JSON字符串。这样,模型绑定器就能够正确地绑定来自JavaScript的序列化表单数据。