这是方法定义:
public static bool TryValidateObject(
Object instance,
ValidationContext validationContext,
ICollection<ValidationResult> validationResults,
bool validateAllProperties
)
我感到困惑的是validateAllProperties
参数,我知道它是真的 - 验证所有属性。
什么时候是假的,不是验证所有属性,而是验证哪个属性?
答案 0 :(得分:6)
请看这里寻找一个好的答案:
似乎当validateAllProperties设置为false时,只验证RequiredAttribute。
答案 1 :(得分:5)
当属性为false时,Validator应验证对象上应用了ValidationAttribute的每个属性。这可以包括以下任何属性:CustomValidationAttribute,DataTypeAttribute,RangeAttribute,RegularExpressionAttribute,RequiredAttribute和StringLengthAttribute,以及从ValidationAttribute派生的任何其他属性。
有关详细信息,请参阅MSDN library on the TryValidateObject method。
在下面的示例中,应该验证Foo,而Bar不应该验证。
public class Example
{
[Required(ErrorMessage = "Foo is a required property.")]
public object Foo { get; set; }
public object Bar { get; set; }
}
答案 2 :(得分:0)
我也不完全理解它,但在与我编写的单元测试自定义验证器挣扎之后,我发现了一个有趣的事情。
当我在没有此参数的情况下启动测试时(默认情况下它是假的),我的自定义验证器被省略了!如果我把它设置为true,那么在我的测试中会考虑它们,现在我可以继续TDD了。希望这对你有所帮助。
答案 3 :(得分:0)
Arjen是对的,当validateAllProperties参数为false时,只验证Required属性。
我使用DataAnnotations写了一篇关于OData验证的帖子,我发现了同样的问题。