我有一些复杂的验证方案,我需要一些帮助。
我有一个看起来像这样的ViewModel:
public class FooModel {
public class BarModel {
public string Name {get;set;}
public DateTime? BirthDate {get;set;}
}
public List<BarModel> Bars {get;set;}
// 10 BarModels added in controller
public FooModel() { Bars = new List<BarModel>(); }
public bool Choose1 {get;set;}
public bool Choose2 {get;set;}
}
现在,根据Choose1的值,我需要判断所有BarModel都有数据集(必需验证)如果Choose1为true,或者如果Choose1为false,则列表中的前两项将被忽略。< / p>
其次,如果Choose2为true,那么我只想为Bars中的每个项目收集生日,并忽略Name属性。
我已经查看了一个自定义属性,但似乎没有一种好方法可以将它应用于嵌套类并获取父类中的值。我也没有找到一种方法可以轻松验证集合中的某些项目。
有什么建议吗?
编辑:
我也考虑过IValidatableObject,但我感兴趣的是一个解决方案,如果可能的话,它也可以在客户端工作。还有其他选择吗?
答案 0 :(得分:2)
public class FooModel : IValidatableObject {
public class BarModel {
public string Name {get;set;}
public DateTime? BirthDate {get;set;}
}
public List<BarModel> Bars {get;set;}
// 10 BarModels added in controller
public FooModel() { Bars = new List<BarModel>(); }
public bool Choose1 {get;set;}
public bool Choose2 {get;set;}
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (Choose1)
{
// do your validation and return result if needed:
yield return new ValidationResult("The title is mandatory.");
}
// ...
}
}