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

问题描述 投票:0回答:1

从视图调用

$.ajax({
    url: _urls.saveNoteDetailsUrl,
    type: "POST",
    cache: false,
    contentType: "application/json",
    data: JSON.stringify(inputModel),
    success: function (response) {
       window.location.assign(_urls.ReturnToHomePageUrl);
    }

控制器

  1. 方法1

    [HttpPost]
    public IActionResult SaveNote(PNoteRequest model)
    
  2. 方法2

    [HttpPost]
    public IActionResult SaveNote([FromBody] PNoteRequest model)
    

Approach1 获取模型,但值均为 null Approach2 为模型本身传递 NULL。

从另一个视图调用相同的端点,如果我使用 Approach1,它会给出相同的错误,但如果我使用 Approach2,它工作正常。 inputModel 结构略有不同,与工作调用相比,非工作调用中存在一些额外的键值对。我已确保所有键都存在于 ViewModel 中。

如果我进行以下更改,那么来自两个视图的调用都可以工作

  1. 传递
    inputModel
    ,就像丢弃
    JSON.Stringify
    方法一样。
  2. 删除 AJAX 调用中的
    contentType
    参数
  3. 从控制器方法中删除
    [FromBody]
    标签

但是数据是作为 urlencoded 传递的,当 inputModel 变得很大时,这给我带来了另一个问题。所以我需要以 JSON 格式传递数据,而不是 urlencoded。

如何修复?

javascript c# jquery json ajax
1个回答
0
投票

我正在努力提供尽可能多的信息。两个视图中的代码非常庞大,连接屏幕上的值来构造 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否”:“”} }

© www.soinside.com 2019 - 2024. All rights reserved.