AngularJS传参至ASP MVC控制器时Symptoms字符串数组为空的问题
解决AngularJS向ASP MVC传递字符串数组为null的问题
看起来你遇到的问题是:其他属性都能正常绑定到后端的Patient对象,但Symptoms字符串数组始终为null。我来帮你排查下可能的原因和对应的解决办法:
1. 先检查AngularJS的作用域绑定问题
看你的AngularJS控制器代码,你创建了一个局部变量var patient并给它赋了值,但没有把这个对象绑定到$scope.patient上。而你在$http请求里发送的是$scope.patient——这会导致发送的数据里根本没有Symptoms(甚至其他属性也不应该被正常接收,可能你实际代码里遗漏了赋值步骤?)。
修正方法:直接把对象绑定到$scope上,或者将局部对象赋值给$scope.patient:
myApp.controller("mainController", function ($scope, $http) { // 直接绑定到$scope,避免局部变量的作用域问题 $scope.patient = {}; $scope.patient.Age = 1; $scope.patient.Gender = 0; $scope.patient.IsSmoker = false; $scope.patient.Symptoms = ['x','y']; // ... 其他属性赋值 $scope.go = function () { $http({ method: "POST", url: "/ConditionDiagnosis/GetCaseResult", dataType: 'json', data: $scope.patient, headers: { "Content-Type": "application/json" } }); }; });
2. 手动序列化JSON(如果作用域绑定没问题)
如果已经确认$scope.patient包含正确的Symptoms数组,但后端还是接收为null,可以尝试手动序列化对象后发送,避免AngularJS默认序列化可能出现的隐式问题:
$scope.go = function () { $http({ method: "POST", url: "/ConditionDiagnosis/GetCaseResult", data: JSON.stringify($scope.patient), // 手动序列化对象 headers: { "Content-Type": "application/json" } }); };
ASP MVC的模型绑定会自动解析JSON字符串,所以这样不会有兼容性问题。
3. 尝试添加[FromBody]特性
ASP MVC的POST方法默认会解析请求体,但如果上面两步都没解决,可以尝试给参数加上[FromBody]特性,明确告诉框架从请求体中绑定模型:
[HttpPost] public void GetCaseResult([FromBody] Patient patient) { int i = 0; i++; }
4. 验证请求Payload
最后,可以用浏览器开发者工具(F12)的Network标签,找到这个POST请求,检查Request Payload里是否包含Symptoms: ["x","y"]:
- 如果Payload里没有这个数组:问题肯定在AngularJS代码里,回到步骤1检查作用域绑定;
- 如果Payload里有,但后端还是
null:检查Patient类的Symptoms属性拼写(你的代码里是正确的),或者尝试步骤2、3的解决方法。
内容的提问来源于stack exchange,提问作者Ali Alnader
相关产品推荐
相关产品推荐

