2013-03-08 1 views
0

Enterpirse 라이브러리 유효성 검사를 사용할 때 중첩 된 객체로 객체의 유효성을 검사 할 때 규칙 집합을 적용하는 데 문제가 있습니다. Person.Address.Address1이 너무 오래가 화재의 경우 내가엔터 프라이즈 라이브러리 유효성 검사 중첩 된 객체의 규칙 집합

ValidationResults results = Validation.Validate(myPersonObject); 

예상대로 내가 즉, 내 기본 유효성 검사를 얻을를 호출하여 객체의 유효성을 검사하려고하면 나는 다음과 같은 개체 이제

public class Person 
{ 
    [ObjectValidator] 
    [ObjectValidator(Ruleset = "A")] 
    public Address Address { get; set; } 
} 

public class Address 
{ 
    [StringLengthValidator(0, 32, MessageTemplate = "Invalid value '{0}' for {1}, Max length:{5}")] 
    public string Address1 { get; set; } 

    [StringLengthValidator(0, 32, MessageTemplate = "Invalid value '{0}' for {1}, Max length:{5}", Ruleset = "A")] 
    public string Address2 { get; set; } 
} 

이있는 경우 Person.Address.Address2는 무시됩니다. 이것은 예상대로입니다.

ValidationResults results = Validation.Validate(myPersonObject, "A"); 

나는 항상 내가 룰 세트를 지정한 사실에도 불구하고 이전의 유효성을 호출과 같은 결과를 얻을 수를 다음과 같이

그러나 나는 룰셋 "A"내 검증을 호출하려고하면. 제안 사항이 있으십니까?

답변

0

그래서 예상 한 동작을 얻기 위해 Ruleset 속성을 지정하는 것뿐만 아니라 ObjectValidator 특성의 생성자에서 내 Ruleset을 전달해야합니다. 매개 변수라는 규칙 집합은 규칙 집합이 현재 객체 ("사람")에 이른바 동안

public class Person 
{ 
    [ObjectValidator] 
    [ObjectValidator("A", Ruleset = "A")] 
    public Address Address { get; set; } 
} 

public class Address 
{ 
    [StringLengthValidator(0, 32, MessageTemplate = "Invalid value '{0}' for {1}, Max length:{5}")] 
    public string Address1 { get; set; } 

    [StringLengthValidator(0, 32, MessageTemplate = "Invalid value '{0}' for {1}, Max length:{5}", Ruleset = "A")] 
    public string Address2 { get; set; } 
} 

는 기본적으로 생성자 인수는 대상 객체 ("주소")에서 대상 룰이다.

관련 문제