2017-09-18 13 views
0

목록에있는 유효성 검사 규칙이 다른 항목의 유효성을 검사하는 방법을 찾으려고했습니다. 나는 훌륭한 라이브러리 인 유창한 유효성 검사를했으나 개별적으로 개별적으로 유효성 검사를 수행하는 방법을 찾지 못하는 것 같습니다. 이 비슷한 스레드 (Validate 2 list using fluent validation)에서 희미한 아이디어를 얻었지만 원하는 방식으로 초점을 맞추는 방법을 잘 모르겠습니다. 이것은 Active Directory의 등록 정보의 목록이 나와 있습니다Fluent Validation, Asp.NET Core의 목록에있는 각 항목에 대해 다른 유효성 확인

public class EditPersonalInfoViewModel 
{ 
    public IList<Property> UserPropertyList { get; set; } 
} 

:

그래서 나는이보기 모델이있다. 각이 클래스에 의해 표현 :

public class Property 
{ 
    public string Name { get; set; } 
    public UserProperties Value { get; set; } 
    public string input { get; set; } 
    public bool Unmodifiable { get; set; } 
    public string Type { get; set; } 
} 

점은이 같은 몇 가지 방법으로 목록의 각 속성에 대해 서로 다른 규칙을 지정하려면 각 광고의 속성은 다른 제약 조건을 가지고 있다는 것입니다 :

public class ADPropertiesValidator : AbstractValidator<EditPersonalInfoViewModel> 
{ 
    public ADPropertiesValidator() 
    { 
     RuleFor(p => p.UserPropetyList).Must((p,n) => 
     { 
       for (int i = 0; i < n.Count; i++) 
        { 
        if ((n[i].Name.Equals("sAMAccountName")) 
         { 
          RuleFor(n.input).NotEmpty().... 
         } 
        else if(...) 
         { 
         //More Rules 
         } 
        } 
     ) 

    } 
} 

어떤 아이디어가 이것에 접근하는 방법? 미리 감사드립니다.

답변

1

잘못된 관점에서 유효성 확인에 다가 섰습니다. 대신 컬렉션의 컨테이너 클래스 내부 검증 조건을 만드는, 당신의 Property 클래스 별 다른 유효성 검사기를 만든 다음 사용하는 당신의 ADPropertiesValidator 내부 :

public class ADPropertyValidator : AbstractValidator<Property> 
{ 
    public ADPropertyValidator() 
    { 
     When(p => p.Name.Equals("sAMAccountName"),() => 
     { 
      RuleFor(p => p.input) 
       .NotEmpty() 
       .MyOtherValidationRule(); 
     }); 

     When(p => p.Name.Equals("anotherName"),() => 
     { 
      RuleFor(p => p.input) 
       .NotEmpty() 
       .HereItIsAnotherValidationRule(); 
     }); 
    } 
} 

public class ADPropertiesValidator : AbstractValidator<EditPersonalInfoViewModel> 
{ 
    public ADPropertiesValidator() 
    { 
     RuleForEach(vm => vm.UserPropertyList) 
      .SetValidator(new ADPropertyValidator()); 
    } 
} 
+0

아! 다른 게시물에서 비슷한 것을 보았지만 작동하지 않을 것이라고 생각했습니다. 어쨌든 이것은 완벽하게 작동합니다! 감사! – Enixf