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
相关产品推荐
相关产品推荐

