【问题标题】:Post AngularJS model to complex model in ASP.NET MVC controller将 AngularJS 模型发布到 ASP.NET MVC 控制器中的复杂模型
【发布时间】:2015-05-26 15:42:13
【问题描述】:

我正在尝试在 JavaScript 中创建模型并通过 $http.post 将其发布到 ASP.NET MVC 控制器方法。在检查发布的 JSON 时,我的 Address 属性被填充。但是,当命中 ASP.NET MVC 控制器时,所有对应的 Address 属性都为空。

角度控制器方法:

$scope.submitForm = function(isValid) {
    alert("Form is valid!");

    var member = {
        TempCardNumber: $scope.tcardno,
        Title: $scope.title,
        FirstName: $scope.firstName,
        LastName: $scope.lastName,
        Address: [
            {
                AddressLine1: $scope.address1,
                AddressLine2: $scope.address2,
                AddressLine3: $scope.address3,
                AddressLine4: $scope.address4,
                TownCity: $scope.towncity,
                County: $scope.county,
                PostCode: $scope.postcode,
                PhoneNumber: $scope.phone
            }
        ],
        EmailAddress: $scope.email
    };

    $http({
        method: 'POST',
        url: '/Home/Index',
        data: member
    }).success(function (data, status, headers, config) {

    });
}

发布的 JSON:

{"TempCardNumber":"633341677489986320","Title":"Mr","FirstName":"test","LastName":"user","Address":[{"AddressLine1":"8 Eaton Close","AddressLine2":" Hatton","TownCity":" Derby","County":" Derbyshire","PostCode":" DE65 5ED","PhoneNumber":"01234567890"}],"EmailAddress":"test@gmail.com"}

ASP.NET MVC 控制器:

public ActionResult Index([FromBody]MemberModel model)
    {
        // do stuff
    }

我已经尝试对 JSON 进行字符串化,在我的 Angular 帖子中将其作为 data: member 传递,并在 ASP.NET MVC 方法上使用 [FromBody],但始终 model.Address 属性为空。

我是否可以在不将每个属性发布到我的 ASP.NET MVC 控制器的情况下做到这一点?

编辑:为清楚起见添加了 MemberModel POCO

// MemberModel class
public string Title {get;set;}
public string FirstName {get;set;}
public string LastName {get;set;}
public Address Address{get;set;}
public string TempCardNumber {get;set;}
public string Email {get;set;}

// Address POCO 
public string AddressLine1 {get;set;}
public string AddressLine2 {get;set;}
public string AddressLine3 {get;set;}
public string AddressLine4 {get;set;}
public string TownCity {get;set;}
public string County {get;set;}
public string Postcode {get;set;}
public string PhoneNumber {get;set;}

【问题讨论】:

  • BindModel 应该在某个地方...如果在服务器端的 POST 事件中,它应该基于输入类型的模型绑定,如果不是,则对象无法转换正确..你能告诉我们你的班级模型MemberModel吗?
  • 您是否不需要在某处设置内容类型,以便告诉 ASP.NET MVC 您正在发布 JSON?尝试将headers: { "Content-Type": "application/json" } 添加到您的$http 请求中。
  • MemberModel 类添加

标签: javascript asp.net-mvc angularjs


【解决方案1】:

确保您在控制器方法上使用[HttpPost] 属性

【讨论】:

  • 他已经说过他的控制器被击中了,所以我怀疑这是问题所在。但很高兴错了。
  • 是的,控制器被击中 - 我有 [HttpPost] 属性
  • 您找到解决方案了吗?我也有同样的问题。
  • 尝试将对象传递给 JSON.stringify() 并将其用作您的数据值
猜你喜欢
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多