Json AngularJS将带有布尔值的空参数传递给asp.net控制器
我正在使用asp.net核心MVC 3.1.0。我从AngularJS打电话给MVC控制器提交表单。但参数对象正在将null传递给控制器: AngularJS:Json AngularJS将带有布尔值的空参数传递给asp.net控制器,json,angularjs,asp.net-mvc,Json,Angularjs,Asp.net Mvc,我正在使用asp.net核心MVC 3.1.0。我从AngularJS打电话给MVC控制器提交表单。但参数对象正在将null传递给控制器: AngularJS: $scope.minfo = 0; $scope.submit = function () { var model = {"obj": {"Email": $scope.email,"Password": $scope.pw,"memberInformed":$scope.minfo}; return
$scope.minfo = 0;
$scope.submit = function () {
var model = {"obj": {"Email": $scope.email,"Password": $scope.pw,"memberInformed":$scope.minfo};
return $http({
method: 'POST',
url: '/Home/Register',
data: model
});
};
控制器c#:
更新:
布尔输入字段:
<input type="checkbox" name="minfo" ng-model="minfo" ng-true-value="1" ng-false-value="0" required />
我可以在不使用
memberInformed
boolean参数的情况下发送参数。否则,对象为空。感谢您的回答。由于您的控制器操作公共IActionResult寄存器(Register obj)
正在使用Register viewmodel,请修改您的角度代码以发送obj,而不将其包装在{}
中,如下所示:
$scope.submit = function () {
var model = {"Email": $scope.email,"Password": $scope.pw };
return $http({
method: 'POST',
url: '/Home/Register',
data: model
});
};
$scope.minfo = false;
<input type="checkbox" ng-model="checkboxModel.value2" ng-true-value="true" ng-false-value="false">
<input type="checkbox" ng-model="checkboxModel.value2">
更新:
根据您的更新,您正试图将int($scope.minfo)发送给布尔数据类型MemberNotified,因此出现了问题
因此,或者将C#Register对象的memberInformed属性类型从bool更改为int,如下所示
public class Register
{
// Since you are sending integer value from angular, modify the data type to int from bool
// public bool memberInformed { get; set; }
public int memberInformed { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
或修改角度和视图代码,如下所示:
$scope.submit = function () {
var model = {"Email": $scope.email,"Password": $scope.pw };
return $http({
method: 'POST',
url: '/Home/Register',
data: model
});
};
$scope.minfo = false;
<input type="checkbox" ng-model="checkboxModel.value2" ng-true-value="true" ng-false-value="false">
<input type="checkbox" ng-model="checkboxModel.value2">
$scope.minfo=false;
或者您可以跳过ng真值和ng假值,如下所示:
$scope.submit = function () {
var model = {"Email": $scope.email,"Password": $scope.pw };
return $http({
method: 'POST',
url: '/Home/Register',
data: model
});
};
$scope.minfo = false;
<input type="checkbox" ng-model="checkboxModel.value2" ng-true-value="true" ng-false-value="false">
<input type="checkbox" ng-model="checkboxModel.value2">
您使用的是哪个版本的MVC?请尝试修改控制器操作签名以使用[FromBody]。=><代码>公共IActionResult寄存器([FromBody]Register obj)。无需串接数据。AngularJS框架会自动完成这项工作。如果没有stringfy,它会显示“Object Object”,但我可以通过stringfy看到参数。问题是它们在控制器端为空@georgeawg检查开发人员控制台的“网络”选项卡以查看请求并对其进行调试。使用ng true value
,minfo值不会是布尔值。当我试图缩短我的问题时,我删除了一些参数。我知道布尔参数是个问题。我再次更新了我的问题。您的答案在没有json.stringify的情况下也可以使用。@Zeynep:我更新了我的答案以删除json.stringify。另外,向memberInformed解释了该问题。请验证我答案中的更新部分