ajax 没有将对象数组传递给操作

ajax doesn't pass array of objects to action

我正在使用 ajax 将 Json 数据传递给 asp.net 核心项目中的一个动作。 我有一组对象要传递

  var AgentScores = [];
.
.
.
AgentScores.push({
  AgentId: AgentId,
  Fullname: Fullname,
  Score : Score
            });
  $.ajax({
                        type: "POST",
                        url: "/Score/SelfReportedScores",
                        contentType: 'application/json; charset=utf-8',
                      
                        //large data must be passed using json
                        data: JSON.stringify(AgentScores),
                    
                        success: function (result) {
                     
                        },
                        error: function (e) {
                        }
                    });

我有一个名为 AgentsListScoreClass.cs 的 class,下面是我尝试在我的操作中获取数组的方式:

 public void SelfReportedScores([FromBody] List<AgentsListScoreClass> AgentScores)
        {

AgentScores 始终为空。 当我传递一个字符串列表时没问题,但是 AgentsListScoreClass 它总是空的。

public class AgentsListScoreClass
{
    public string AgentId { get; set; }
    public string Fullname { get; set; }
    public short Score { get; set; }
}

您必须通过删除 contenttype 和 stringify

来修复 ajax 错误
  var agentScores = [];

agentScores.push(
{
  AgentId: AgentId,
  Fullname: Fullname,
  Score : Score
   }
);
$.ajax({
  type: "POST",
   url: "/Score/SelfReportedScores",
   data: { agentScores },
    success: function (result) {
  },
error: function (e) {
 }
 });

也许您只需要邮递员使用 [FromBody]。如果仍然有 null,请尝试将其删除。

AgentScores is always null.

请在浏览器开发者工具“网络”选项卡中捕获带有发布数据的实​​际请求,并检查您发布的数据是否如下所示。

而你的 AgentsListScoreClass 模型的 属性 AgentId 被定义为 string 类型,请确保你用引号将值括起来,像这样 "AgentId":"1".

更新:

AgentScores.push({AgentId: AgentId, Fullname: Fullname, Score : Score});

this is how data looks like 'data = "[{"AgentId":"015d6fce-2b6e-4702-b4ac-8af31bba8ffa","Fullname":"name","Score":"0"},{"AgentId":" ......'

您可以尝试使用 parseFloat() 函数来解析 Score 数据,如下所示。

AgentScores.push({
    AgentId: AgentId,
    Fullname: Fullname,
    Score: parseFloat(Score)
});