0

현재 프로젝트 :중첩 된 위치 (x => x.Condition = value,() => {}); fluentvalidation

  • ASP.NET 4.5.1
  • MVC는 5

내가 둥지를 할 수있는 경우에 알 필요가 같은 When() 문 :

When(x => x.Cond1 == val1, 
() => { 
    When(x => x.SubCond1 == SubVal1, 
    () => { 
     When(x => x.Final1 == finalVal1, 
     () => { 
      RuleFor(x => x.Field1) 
       .NotEmpty().WithMessage("Should not be empty"); 
      // a few more here 
      }); 
     When(x => x.Final2 == finalVal2, 
     () => { 
      RuleFor(x => x.Field8) 
       .NotEmpty().WithMessage("Should not be empty"); 
      // a few more here 
      }); 
     }); 
    When(x => x.SubCond2 == SubVal2, 
    () => { 
     RuleFor(x => x.Field16) 
      .NotEmpty().WithMessage("Should not be empty"); 
     // a few more here 
     }); 
    }); 

때문에 마지막으로 내가 원하는 것은 30 개 이상의 양식 필드를 다음과 같이 장식하는 것입니다.

RuleFor(x => x.Field1) 
    .NotEmpty().WithMessage("Should not be empty") 
    .When(x => x.Cond1 == val) 
    .When(x => x.SubCond1 == SubVal1) 
    .When(x => x.Final1 == finalVal1); 

그건 그냥지지 않습니다.

아무 것도 실제로 사용자가 편집 할 수있는 필드 (사용자가 선택할 수있는 값)가 아니기 때문에 검증 자체가 필요하지 않습니다. 나는 그것들을 알려진 값과 비교할 필요가 있습니다. 실제로 if/else 문을 사용하는 것이 더 적절합니다. 그렇지 않습니다.

모델은 크게 평평하며 가져온 모델을 나타내는 두 번째 수준 When() 만 있고 가져온 모델 내에서 특정 필드를 처리하는 다른 방법은 세 번째 수준입니다.

+0

시도해 보셨습니까? –

+0

예, 발사하지 않는 것 같습니다. –

+0

설명 : 해고 된 것 같지 않습니다. 그래서 제가 질문했습니다. –

답변

1

당신은 할 수는 없지만, Rule Sets을 사용해 규칙을 그룹화 할 수는 있습니다. 또한 Cascade Mode을 확인하십시오.

+0

밝혀졌습니다. 내 모델과 유효성 검증을 모두 잘못하고있었습니다. 둘 다 정리하고, 이제 모든 것이 잘 작동합니다. 내 문제는 내 양식이 키메라라는 점이었습니다. 두 가지 기본 모델의 콘텐츠가 사용자의 역할에 따라 페이지에 조건부로 있었고 각 역할에 대해 주소 모델이 1 ~ 3 번 가져 왔습니다. , 그리고 그 자체는 각 주소에 다른 주소가 필요한지에 대해서도 조건이있다. 필자는 모든 모델을 추출하여 검증을 위해 동일하게 수행했습니다. –

+0

결국 사용자가 국가/주/우편 번호/지방 및 우편 번호로 표시되는 주소 모델의 하위 섹션이 필요했습니다. (When when (x => x.cond1 == val1,() => {}); 옵션을 바로 처리해야했습니다. –

+0

나는 그것을 승리로 만들 것입니다. – Tarek