复杂的验证方案

时间:2011-10-19 00:48:07

标签: asp.net-mvc-3 validation

我有一些复杂的验证方案,我需要一些帮助。

我有一个看起来像这样的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,但我感兴趣的是一个解决方案,如果可能的话,它也可以在客户端工作。还有其他选择吗?

1 个答案:

答案 0 :(得分:2)

通过实施IValidatableObject

编写您自己的验证
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.");
    }
    // ...
}

}