$.ajax({
url: _urls.saveNoteDetailsUrl,
type: "POST",
cache: false,
contentType: "application/json",
data: JSON.stringify(inputModel),
success: function (response) {
window.location.assign(_urls.ReturnToHomePageUrl);
}
[HttpPost]
public IActionResult SaveNote(PNoteRequest model)
[HttpPost]
public IActionResult SaveNote([FromBody] PNoteRequest model)
Approach1 获取模型,但值均为 null Approach2 为模型本身传递 NULL。
从另一个视图调用相同的端点,如果我使用 Approach1,它会给出相同的错误,但如果我使用 Approach2,它工作正常。 inputModel 结构略有不同,与工作调用相比,非工作调用中存在一些额外的键值对。我已确保所有键都存在于 ViewModel 中。
如果我进行以下更改,那么来自两个视图的调用都可以工作
inputModel
,就像丢弃JSON.Stringify
方法一样。contentType
参数[FromBody]
标签但是数据是作为 urlencoded 传递的,当 inputModel 变得很大时,这给我带来了另一个问题。所以我需要以 JSON 格式传递数据,而不是 urlencoded。
如何修复?
我正在努力提供尽可能多的信息。两个视图中的代码非常庞大,连接屏幕上的值来构造 inputModel。我已经验证了多次,AJAX调用的差异仅在NoteInfo键上。
这是 PNoteRequest 类文件。 PNoteRequest 类中还有大约 30 个其他属性。
public class PNoteRequest
{
public int RequestId { get; set; }
public NoteInfo NoteInfo { get; set; }
public string RequestText { get; set; }
public string RecordNo { get; set; }
}
NoteInfo 类中还有大约 20 个其他属性。
公共类注释信息
{
公共字符串标题{获取;放; }
公共字符串描述{获取;放; }
公共布尔? IsSAR { 得到;放; }
公共 int MemoOverRideRecordNumber { 获取;放; }
公共 bool IsToReplaceSAR { 获取;放; }
公共整数?区域{获取;放; }
公共字符串 QISNo { 获取;放; }
公共字符串修订注释{获取;放; }
}
两个视图的调用之间的差异在 NotInfo 属性中
请求有效调用的有效负载 {“请求ID”:4062, "NoteInfo":{"Title":"保存小型 JSON 对象的注释检查。", "Description":"AJAX调用保存NOTE并保存SAR。", “IsSAR”:假} }
暂停 NULL 的调用的请求负载 {"请求ID":0, "NoteInfo":{"Title":"保存小型 JSON 对象的注释检查。", "Description":"AJAX调用保存NOTE并保存SAR。", “IsToReplaceSAR”:假, "MemoOverRideRecordNumber":"", "修订意见":"", “地区”:””, “QIS否”:“”} }