Asp.Net 模型绑定到包装属性
Asp.Net model binding to wrapped properties
我正在使用 ASP.Net MVC 4,但我遇到了模型绑定方面的问题。
如果有两个class:
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 属性 包装到另一个 class,例如:
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; }
}
我找不到让操作像以前一样工作的方法。
有什么方法可以让模型绑定生效吗?
问题是因为默认模型绑定器知道如何绑定到 List<T>
但对 HasMany<T>.SetItems()
一无所知(怎么可能)。
两个选项:
1 编写自己的模型活页夹
或2继承自List<T>
(未经测试,可能还是不行,但最快可以试试),即:
public class HasMany<T> : List<T> {
public class HasMany() {
}
public class HasMany(List<T> items) {
this.Clear();
this.AddRange(items);
}
public void SetItems(List<T> items) {
this.Clear();
this.AddRange(items);
}
}
像这样改变你的模型:
public class Employee {
public string Name { get; set; }
public virtual ICollection<JobSkill> JobSkills { get; set; }
}
public class JobSkill {
public string Name { get; set; }
}
并提交 HasValue 代码,您不需要它。
我正在使用 ASP.Net MVC 4,但我遇到了模型绑定方面的问题。
如果有两个class:
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 属性 包装到另一个 class,例如:
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; }
}
我找不到让操作像以前一样工作的方法。 有什么方法可以让模型绑定生效吗?
问题是因为默认模型绑定器知道如何绑定到 List<T>
但对 HasMany<T>.SetItems()
一无所知(怎么可能)。
两个选项:
1 编写自己的模型活页夹
或2继承自List<T>
(未经测试,可能还是不行,但最快可以试试),即:
public class HasMany<T> : List<T> {
public class HasMany() {
}
public class HasMany(List<T> items) {
this.Clear();
this.AddRange(items);
}
public void SetItems(List<T> items) {
this.Clear();
this.AddRange(items);
}
}
像这样改变你的模型:
public class Employee {
public string Name { get; set; }
public virtual ICollection<JobSkill> JobSkills { get; set; }
}
public class JobSkill {
public string Name { get; set; }
}
并提交 HasValue 代码,您不需要它。