You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS发送JSON数组到ASP.NET Web API控制器接收为null求助

问题原因及解决方案

1. 核心问题:前端发送的是JSON对象而非数组

你浏览器网络面板显示的请求体为{0: {QuesID: 1,...}, 1:{...}}格式的键值对对象,而ASP.NET Web API的List<T>类型只能绑定[{...},{...}]格式的JSON数组,格式不匹配直接导致模型绑定失败,参数为null。
该问题的根源是JS代码中$scope.stuanswer未正确初始化为数组,修改你的前端JS代码,在循环赋值前先初始化数组:

function test()
{
    // 新增这行,初始化空数组
    $scope.stuanswer = [];
    for (var i = 0; i < qLength; i++) 
    {
        $scope.stuanswer[i] = 
            {
                QuesID: 1,
                StudentId: 2,
                TestId:1,
                GivenAnswer: 1,
                TestTakenDate: '01-01-01'
            }               
     }

     apiService.post('/api/test/saveans', $scope.stuanswer,
            saveansSucceded,
            saveansFailed);
}

修改完成后检查浏览器网络面板的请求体,确认已经变为数组格式即可。

2. 模型类匹配校验

你控制器接收参数的类型为List<StuAnswerViewModel>,但贴出的实体类定义是StuAnswer,请确认以下两点:

  • 存在StuAnswerViewModel类,且包含QuesID、StudentId、TestId、GivenAnswer、TestTakenDate这5个和传参对应的属性,属性类型匹配
  • 不需要传递自增的ID字段,不会影响模型绑定

3. 日期格式兼容处理

你传递的TestTakenDate值为"01-01-01",C#默认的DateTime解析规则可能会识别失败,进而导致整个模型绑定失败,可选两种解决方案:

  • 将StuAnswerViewModel中的TestTakenDate属性类型改为可空日期DateTime?
  • 前端传递标准ISO格式日期,将赋值改为TestTakenDate: new Date('01-01-01').toISOString()

内容的提问来源于stack exchange,提问作者ArunVijai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:39:05