我们正在使用DataAnnotations
来验证我们的模型。
我们模型的一个非常简化的版本是:
public class Model
{
public List<Thing> Things;
}
public class Thing
{
[Required]
public string Name {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
现在,有趣的是,如果我创建一个Thing
没有名称的并将其添加到模型中,我希望验证失败,但它通过了(震惊!)。
var model = new Model ();
var invalidThing = new Thing (); // No name would fail validation
model.Things.Add(invalidThing );
var validationContext = new ValidationContext(model);
var validationResults = new List<ValidationResult>();
var isValid = Validator.TryValidateObject(model, validationContext, validationResults, true);
Assert.False (isValid); // This fails!
Run Code Online (Sandbox Code Playgroud)
我认为这样做的原因是当您验证模型时,它会验证每个属性,但如果它是一个集合,则不会验证属性中的项目。Things
是一个没有验证的属性,所以它通过了(尽管它包含无效项目)。
我们如何确保验证也验证集合属性中的项目?我可以使用一些开箱即用的验证器吗?