帮我理解方法Validator.TryValidateObject()

时间:2010-06-03 09:00:22

标签: silverlight-4.0 wcf-ria-services

这是方法定义:

public static bool TryValidateObject(
Object instance,
ValidationContext validationContext,
ICollection<ValidationResult> validationResults,
bool validateAllProperties

我感到困惑的是validateAllProperties参数,我知道它是真的 - 验证所有属性。

什么时候是假的,不是验证所有属性,而是验证哪个属性?

4 个答案:

答案 0 :(得分:6)

请看这里寻找一个好的答案:

http://connect.microsoft.com/VisualStudio/feedback/details/605635/missleading-parametername-validateallproperties-in-validator-try-validate-componentemodel-dataannotations

似乎当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验证的帖子,我发现了同样的问题。

http://blog.jorgef.net/2011/01/odata-dataannotations.html