【问题标题】:AngularJS passes null parameter with bool value to asp.net controllerAngularJS 将带有布尔值的空参数传递给 asp.net 控制器
【发布时间】:2020-06-12 16:15:53
【问题描述】:

我正在使用 asp.net core 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 $http({
        method: 'POST',
        url: '/Home/Register',
        data: model
    });
};

控制器c#:

[AllowAnonymous]
[HttpPost]
public IActionResult Register(Register obj)
{       
    //...
    return View();
}

更新: 布尔输入字段:

<input type="checkbox" name="minfo" ng-model="minfo" ng-true-value="1" ng-false-value="0" required />

我可以在没有memberInformed 布尔参数的情况下发送参数。否则对象为空。感谢您的回答。

【问题讨论】:

  • 您使用的是哪个版本的 MVC?请尝试修改控制器动作签名以使用 [FromBody] 。 => public IActionResult Register([FromBody]Register obj).
  • 不需要对数据进行字符串化。 AngularJS 框架会自动执行此操作。
  • 如果没有 stringfy,它会显示“对象对象”,但我可以看到带有 stringfy 的参数。问题是它们在控制器端为空。 @georgeawg
  • 检查开发者控制台的网络选项卡以查看请求并对其进行调试。
  • 使用 ng-true-value ,minfo 值不会是布尔值

标签: json angularjs asp.net-mvc


【解决方案1】:

由于您的控制器操作 public IActionResult Register(Register obj) 正在注册视图模型,请修改您的角度代码以发送 obj,而不将其包装在 {} 中,如下所示:

$scope.submit = function () {   
    var model = {"Email": $scope.email,"Password": $scope.pw };       
    return $http({
        method: 'POST',
        url: '/Home/Register',
        data: model
    });
};

更新: 根据您的更新,您正尝试将 int ($scope.minfo) 发送到布尔数据类型 memberInformed 并因此出现问题。

所以,或者将 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.minfo = false;

<input type="checkbox" ng-model="checkboxModel.value2"  ng-true-value="true" ng-false-value="false">

或者您可以跳过 ng-true-value 和 ng-false-value,如下所示:

<input type="checkbox" ng-model="checkboxModel.value2">

【讨论】:

  • 对不起。当我试图缩短我的问题时,我删除了一些参数。我看到一个布尔参数是问题所在。我再次更新了我的问题。顺便说一句,您的答案在没有 json.stringify 的情况下有效。
  • @Zeynep:我更新了我的答案以删除 Json.stringify 。此外,还解释了 memberInformed 的问题。请验证我的答案中的更新部分
猜你喜欢
  • 1970-01-01
  • 2018-12-18
  • 2015-09-13
  • 1970-01-01
  • 2010-09-14
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 2016-05-08
相关资源
最近更新 更多