视图调用
$.ajax({
url: _urls.saveNoteDetailsUrl,
type: "POST",
cache: false,
contentType: "application/json",
data: JSON.stringify(inputModel),
success: function (response) {
window.location.assign(_urls.ReturnToHomePageUrl);
}
字符串
控制器
1.#方法一
[HttpPost]
public IActionResult SaveNote(PNoteRequest model)
型
1.#方法二
[HttpPost]
public IActionResult SaveNote([FromBody] PNoteRequest model)
型
Approach1获取一个模型,但值都为null Approach2为模型本身传递一个NULL。
从另一个View调用同一个端点,如果我使用Approach1,它会给出相同的错误,但如果我使用Approach2,它会正常工作。inputModel结构略有不同,与工作调用相比,非工作调用中存在一些额外的键值对。我已经确保所有的Keys都存在于ViewModel中。
如果我做了以下更改,那么来自两个视图的调用都可以工作
1.按原样传递inputModel
,丢弃JSON.Stringify
方法。
1.删除AJAX调用中的contentType
参数
1.从控制器方法中删除[FromBody]
标记
但是数据是以urlencoded的形式传递的,当inputModel变得很大时,这给了我另一个问题。所以我需要以JSON格式传递数据,而不是以urlencoded的格式传递。
我该怎么修?
感谢您的回复。我认为我没有正确解释这个问题。有2个视图对同一个端点进行AJAX POST调用。如果传递的对象不是很大,一切都很好。如果对象很大,那么它将模型的NULL传递给控制器。为了解决上述问题,我做了以下更改1)将[FromBody]添加到控制器2)在VIEWS中的AJAX调用中添加了contentType参数和JSON.Stringify()。现在从其中一个VIEW调用可以工作,但另一个不能。另一个调用将模型的NULL传递给CONTROLLER
我试图提供尽可能多的信息。在2个视图中的代码是巨大的,连接从屏幕上的值来构造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个其他属性。
public class NoteInfo
{
public string Title { get; set; }
public string Description { get; set; }
public bool? IsSAR { get; set; }
public int MemoOverRideRecordNumber { get; set; }
public bool IsToReplaceSAR { get; set; }
public int? Region { get; set; }
public string QISNo { get; set; }
public string RevisionComments { get; set; }
}
型
这两个视图的调用之间的区别在于NotInfo属性
请求工作呼叫的有效负载
{"RequestId":4062,
"NoteInfo":{"Title":"Save Note Check For Small JSON Object.",
"Description":"AJAX call for save NOTE and save SAR.",
"IsSAR":false}
}
型
请求暂停NULL的调用的有效负载
{"RequestId":0,
"NoteInfo":{"Title":"Save Note Check For Small JSON Object.",
"Description":"AJAX call for save NOTE and save SAR.",
"IsToReplaceSAR":false,
"MemoOverRideRecordNumber":"",
"RevisionComments":"",
"Region":"",
"QISNo":""}
}
型
1条答案
按热度按时间6yjfywim1#
你的第二个json没有通过验证,这就是为什么它返回null,例如这个属性无效
字符串
第一个是int,第二个是int?type,所以应该是
型
为了转换它们,您需要将属性类型更改为字符串或编写自定义JSON转换器