开发者

help me understand the method Validator.TryValidateObject()

开发者 https://www.devze.com 2023-01-02 07:20 出处:网络
this is the method definition: public static bool TryValidateObject( Object instance, ValidationContext validationContext,

this is the method definition:

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

)

what i am confused is the validateAllProperties par开发者_StackOverflow中文版ameter, I understand when it is true-validate all properties.

What about when it is false, not validate all properties, but which property will be validated?


See here for a good answer:

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

It seems that when validateAllProperties is set to false that only the RequiredAttribute is validated.


When the property is false the Validator should validate each of the properties on the object that have a ValidationAttribute applied to them. This can include any of these attributes: CustomValidationAttribute, DataTypeAttribute, RangeAttribute, RegularExpressionAttribute, RequiredAttribute, and StringLengthAttribute, along with any other attributes that derive from ValidationAttribute.

See the MSDN library on the TryValidateObject method for more information.

In the following example, Foo should be validated, while Bar should not.

public class Example
{
  [Required(ErrorMessage = "Foo is a required property.")]
  public object Foo { get; set; }

  public object Bar { get; set; }
}


I also don't fully understand it but after struggling with Unit Testing custom validators written by me I noticed one interresting thing.

When I launched my tests without this parameter (so by default it was false), my custom validators were omitted! if I set it to true, they were taken into account in my tests and now I can happily continue TDD. Hope this helps you a bit.


Arjen is right, only the Required attribute is validated when the validateAllProperties parameter is false.

I wrote a post about OData validation using DataAnnotations and I found the same issue.

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

0

精彩评论

暂无评论...
验证码 换一张
取 消