2010-06-03 1 views
3

это определение метода:помочь мне понять метод Validator.TryValidateObject()

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

)

, что я путаюсь является параметром validateAllProperties, я понимаю, когда это правда, проверить все свойства ,

А что, когда оно ложно, не проверяет все свойства, но какое свойство будет проверено?

ответ

5

Когда свойство является ложным, валидатор должен проверить каждое из свойств объекта, к которому применяется атрибут 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; } 
} 
0

Я также не совсем понимаю это, но после того, как я боролся с выборочными валидаторами Unit Testing, написанными мной, я заметил одну интересную вещь.

Когда я запустил свои тесты без этого параметра (поэтому по умолчанию это было ложно), мои пользовательские валидаторы были опущены! если я установил его в true, они были учтены в моих тестах, и теперь я могу с радостью продолжить TDD. Надеюсь, вам это поможет.

+0

это также то, что я получил, поэтому я задал вопрос о параметре. – Benny

0

Arjen прав, только атрибут Required проверяется, если параметр validateAllProperties является ложным.

Я написал сообщение об утверждении OData с использованием DataAnnotations, и я нашел ту же проблему.

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