【问题标题】:Pass Data $http.post From AngularJS and ASP.net MVC gets null从 AngularJS 和 ASP.net MVC 传递数据 $http.post 为空
【发布时间】:2015-02-12 10:44:57
【问题描述】:

我正在尝试将数据从 AngularJS 传递到 ASP.net MVC 并且总是为空。 这是我的代码(仅发布基本、按钮、控制器和 c#:

HTML:

<a class="btn btn-grey btn-lg btn-block" ng-click="AddCar()">Save</a>

控制器

$scope.AddCar = function () {
            $http.post("Cars/AddCar", JSON.stringify($scope.new.JsonCar)).success(function (data) {
                Alert(ok)
            })

c#

public string AddCar(string JsonCar) 
        {
            try
           ....
        }

在 JSON.stringify($scope.new.JsonCar) 我得到这个:

"{"名称":"FIAT 500","描述":"新 car","MaxUserCapacity":5,"PhotoPath":"none"}"

我做错了什么?

【问题讨论】:

    标签: c# asp.net-mvc angularjs angularjs-directive angularjs-controller


    【解决方案1】:

    直接将您的对象作为对象传递,而不是对其进行字符串化。由于它现在正在传递,它是一个字符串,而不是一个可以正确反序列化的对象。

    $http.post("Cars/AddCar", $scope.new.JsonCar).success(function (data) {
                Alert(ok)
            })
    

    创建一个与您的有效负载匹配的 Car 对象。序列化程序将为您处理您的 JSON 对象。

    public Car AddCar(Car car) 
        {
            try
           ....
        }
    

    我的假设是,无论如何,您都会将字符串反序列化为对象。这只是为您节省了额外的步骤。

    【讨论】:

    • 是的,就是这样。非常感谢:)
    • 完美!很高兴我能帮上忙。
    • 它可以工作,因为现在它设置了contentType:"application/json"
    【解决方案2】:

    删除 JSON.stringify,你的对象已经是 JSON。

    添加一个 [FromBody] 属性:

     public string AddCar([FromBody]string JsonCar) 
        {
            try
           ....
        }
    

    【讨论】:

    • [FromBody] 属性告诉 MVC 从 HTTP 请求的正文中获取对象的值。
    猜你喜欢
    • 2013-10-15
    • 2014-09-11
    • 2016-07-16
    • 2015-09-08
    • 2016-05-05
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多