从angularjs到C#MVC视图模型的$ http帖子,具有正确的List计数但值为null

时间:2016-09-22 13:05:55

标签: angularjs asp.net-mvc asp.net-mvc-4

我使用$ http

发出以下帖子请求
var registration = {
   userId: 23,
   groupings: [ 
           { Id: 1, Name: 'Test Group 1', Description: 'Yo' }, 
           { Id: 4, Name: 'Test Group 4', Description: 'Er' } 
]
}
$http({
            method: 'POST',
            url: url,
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
            data: $.param({
                code: eventCode,
                UserId: registration.userId
                Groupings: registration.groupings
            })
        })

然后是我的行动

    [HttpPost]
            public ActionResult New(string code, RegistrationVM model)
            {
    :
    :
    :
    }


    public class RegistrationVM  
        {
             public int UserId {get;set;}
             public IEnumerable<GroupingVM> Groupings { get; set; }
    }

public class GroupingVM{
   public int Id {get;set;}
   public string Name {get;set;}
   public string Description {get;set;}

   public int AnotherPropertyId {get;set;}
   public ANewClass ANewClass {get;set;}
}

每当帖子发生时,我都会让模型属性反映我发布的内容,除了IEnumerable(Groupings)属性。假设我在Groupings属性上发布了2个对象,当我转到Action时,Groupings属性的计数为2,但每个实例在每个对象上都有NULL或0值。我想知道我是如何弄乱这个帖子的。

1 个答案:

答案 0 :(得分:1)

首先,让控制器将一个对象作为参数。添加&#34;字符串代码&#34;到RegistrationVM并删除字符串代码作为参数。

然后在创建客户端对象时执行相同操作。

其次,而不是使用内容类型&#34; x-www-form-urlencoded&#34;使用&#34; application / json&#34;哪个更适合传递对象。

在发布数据之前,您需要使用data: JSON.stringify(registration)

对obj进行字符串化

有关详细信息,请阅读有关问题的评论。