Asp.Net模型绑定到包装属性

时间:2016-01-06 09:45:59

标签: asp.net asp.net-mvc model-binding

我正在使用ASP.Net MVC 4,我对模型绑定有疑问。

如果有两个班级:

public class Employee {
    public string Name { get; set; }
    public List<JobSkill> JobSkills { get; set; }
}

public class JobSkill {
    public string Name { get; set; }
}

所以我可以使用Employee作为操作的参数,如果它接收到嵌套了JobSkills数组的数据,它的JobSkills属性就不会是空的。

public ActionResult Create(Employee employee) {
    var jobSkillAmount = employee.JobSkills.Count();
    ....
}

我的问题是如果我将JobSkills属性包装到另一个类,例如:

public class HasMany<T> {
    private List<T> Items { get; set; }

    public class HasMany() {
    }

    public class HasMany(List<T> items) {
        Items = items;
    }

    public void SetItems(List<T> items) {
        Items = items;
    }
}

public class Employee {
    public string Name { get; set; }
    public HasMany<JobSkill> JobSkills { get; set; }
}

public class JobSkill {
    public string Name { get; set; }
}

我无法像以前那样找到让行动起作用的方法。 是否有任何方法让模型绑定使其工作?

2 个答案:

答案 0 :(得分:2)

问题是因为默认模型绑定器知道如何绑定到col-xs-12 col-lg-6但对List<T>一无所知(怎么可能)。

两个选项:

1编写自己的模型绑定器

或2继承自HasMany<T>.SetItems()(未经测试,可能仍然无法胜任,但尝试最快),即:

List<T>

答案 1 :(得分:0)

改变你的模特:

public class Employee {
public string Name { get; set; }
public virtual ICollection<JobSkill> JobSkills { get; set; }

}

public class JobSkill {
    public string Name { get; set; }
}

并提交HasValue代码,你不需要它。