Web API模型绑定到包含复杂类型列表的复杂类型 - 来自body

时间:2015-02-10 01:56:26

标签: asp.net angularjs asp.net-web-api model-binding complextype

我已经阅读并尝试了thisthis,并继续在圈子里走来走去。

编辑:客户端正在发送它收到的模型,服务器根据下面列出的类构建复杂类型并将其发送到客户端,客户端发回完全相同的模型但模型binder不会绑定它。

使用AngularJS向我的web api发布包含复杂类型列表的复杂类型。邮政机构如下:

enter image description here

I尝试绑定的复杂类型是:

public class AttendanceSelectTModel
{
    public List<AttendanceChildSelectTModel> CA { get; set; }
    public List<AttendanceChildSelectTModel> CI { get; set; }
    public bool SignIn { get; set; }

    public AttendanceSelectTModel() { }

    public AttendanceSelectTModel(List<Person> ppl)
    {
        CA = new List<AttendanceChildSelectTModel>();
        CI = new List<AttendanceChildSelectTModel>();

        foreach (Person p in ppl)
            if (p.Status == Status.SignedIn)
                CA.Add(new AttendanceChildSelectTModel(p));
            else
                CI.Add(new AttendanceChildSelectTModel(p));
    }
}

public class AttendanceChildSelectTModel
{
    public string Name { get; set; }
    public int PId { get; set; }
    public string ImgURL { get; set; }

    public AttendanceChildSelectTModel() { }

    public AttendanceChildSelectTModel(Person user)
    {
        Name = user.FirstName;
        PId = user.PersonId;
        ImgURL = user.ImgURL;
    }
}
你能指出我正确的方向吗?是我试图做甚至可能的事情,还是我不能绑定到复杂类型列表?

谢谢!

1 个答案:

答案 0 :(得分:0)

不幸的是,Model Binder无法绑定到包含复杂类型列表的复杂类型。我的解决方案是将复杂类型分解为一个变量的平面列表,不是很好,因为我使用的是angularJs。另一种解决方案是扩展模型binder类并手动处理数据绑定。