【问题标题】:Posting JSON objects into MVC Controller C#将 JSON 对象发布到 MVC 控制器 C#
【发布时间】:2017-02-22 01:58:03
【问题描述】:

JS 文件

var module = angular.module('myApp', []);

module.controller('myController', function ($scope, $http) {
    $scope.items = [{}];
    $scope.users = {};
    $scope.addfield = function () {
        $scope.items.push({});
    }
    $scope.saveUser = function () {
        $scope.results = [];
        console.log($scope.users);

        $http({
            method: 'POST',
            url: '/Data/MethodTest',

            data:{
                users: $scope.users
            }

        }).success(function (data) {
            console.log(data)
        });

    }

});

HTML 代码

<body data-ng-app="myApp" data-ng-controller="myController">
    <form name="educdetailsform" novalidate>
        <label>Education Details</label></br>
        <button ng-click="addfield()">Add Education</button>
        <div ng-repeat="item in items track by $index">
            <input type="text" name="empData.qualification[]" placeholder="Qualification" ng-model="users[$index].qualification">
            <input type="text" name="empData.year[]" placeholder="Year of Passing" ng-model="users[$index].year">
            <input type="text" name="empData.percentage[]" placeholder="Percentage" ng-model="users[$index].percentage">
        </div>
        <input type="submit" name="submit" ng-click="saveUser()" />
    </form>
    </div>
</body>

.cs 代码 // 我正在尝试将提取到数据库的对象的值插入。在此之前,我刚刚编写了反序列化对象的代码。到目前为止,我只得到从 JS 传递的空值 //

 public JsonResult MethodTest(string jsonData)
         {
             string jdata = jsonData.ToString();
             List<StockAllocate> stockData;
             bool status = false;


                JavaScriptSerializer jss = new JavaScriptSerializer();
                stockData = jss.Deserialize<List<StockAllocate>>(jdata);
                 status = true;


             return new JsonResult { Data = new { status = status } };
         }

【问题讨论】:

标签: c# angularjs json asp.net-mvc


【解决方案1】:

默认情况下,只有复杂的参数会从正文中解析。您需要为字符串添加 [FromBody] 前缀。

public JsonResult MethodTest([FromBody]string jsonData)

但万一你不知道:

public JsonResult MethodTest(List<StockAllocate> jsonData)

也是可以的。

【讨论】:

  • [HttpPost] public JsonResult MethodTest(List jsonData) { bool status = false;使用 (InventoryonlineEntities dc = new InventoryonlineEntities()) { foreach (var e in jsonData) { dc.StockAllocates.Add(e); dc.SaveChanges(); } 状态 = 真; } 返回新的 JsonResult { 数据 = 新 { 状态 = 状态 } }; }
  • 我已经完成了上述更改。仍然 JSON 传递空值
【解决方案2】:

尝试将 CS 控制器中的输入参数从“jsonData”重命名为“users”(您在 JS $scope.saveUser$http.post 数据中使用的那个。

否则,试试下面的代码:

$http.post('/Data/MethodTest/', {users: $scope.users})
.success(function(data){
  // Code here
})
.error(function(result){
 // code here
});

别忘了用 [HttpPost] 装饰你的 CS 函数 MethodTest。

[HttpPost]    
public JsonResult MethodTest(string users)
             {
                 string jdata = users.ToString();
                 List<StockAllocate> stockData;
                 bool status = false;


                    JavaScriptSerializer jss = new JavaScriptSerializer();
                    stockData = jss.Deserialize<List<StockAllocate>>(jdata);
                     status = true;


                 return new JsonResult { Data = new { status = status } };
             }

希望这会有所帮助。谢谢。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 2014-03-01
  • 2021-11-07
  • 1970-01-01
  • 2017-06-22
  • 2012-10-03
相关资源
最近更新 更多