jquery 对控制器的AJAX POST调用传递NULL

3lxsmp7m  于 2023-11-17  发布在  jQuery
关注(0)|答案(1)|浏览(106)

视图调用

$.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":""}
}

6yjfywim

6yjfywim1#

你的第二个json没有通过验证,这就是为什么它返回null,例如这个属性无效

"MemoOverRideRecordNumber":"",
 "Region":"",

字符串
第一个是int,第二个是int?type,所以应该是

"MemoOverRideRecordNumber":0,
"Region":null,


为了转换它们,您需要将属性类型更改为字符串或编写自定义JSON转换器

相关问题