2012-10-31 7 views
4

MVC 프로젝트에서 Fluent Validation (http://fluentvalidation.codeplex.com)을 사용하여 2 가지 규칙을 만들고 싶습니다.유창한 사용자 정의 유효성 검사

회사와 이름이 모두 비어 있으면 아무 것도 일어나지 않아야합니다. 둘 중 하나라도 채워지면 아무 것도 발생하지 않습니다. 회사 또는 이름이 채워지지 않은 경우 둘 다에 레이블을 표시하십시오.

필자는 지금까지 시도 (오류 메시지가 동일 할 수 있음) : 필자와 않는 한,하지만 그들 중 누구도 작동하지해야하는 경우, 조합을 시도

RuleFor(x => x.Name) 
.NotEmpty() 
.WithMessage("Please fill in the company name or the customer name") 
.Unless(x => !string.IsNullOrWhiteSpace(x.Company)); 

RuleFor(x => x.Company) 
.NotEmpty() 
.WithMessage("Please fill in the company name or the customer name") 
.Unless(x => !string.IsNullOrWhiteSpace(x.Name)); 

. 아무 것도 기입하지 않으면 오류가 두 속성에 표시되지 않습니다.

아무도 도와 줄 수 있습니까?

+0

아무도이를 고칠 방법을 모릅니다. : – Robin

+1

문제를 재현 할 수 없으며 정확한 규칙을 사용하여 간단한 테스트를 실행했으며 이름과 회사가 모두 null 인 경우 오류가 발생합니다. FluentValidation을 통합 할 때 문제가 될 수 있습니까? ASP.NET MVC, 즉 다른 규칙은 작동합니까? –

+0

정상적인 상황에서 작동하지만,이 양식이 ajax (jquery validate)와 함께 게시된다는 사실을 여러분에게 알릴 수 있어야합니다. , Unless 및 반드시 서버 측에서 실행되어야하므로 클라이언트 측에서 유효성을 검사 할 수 없습니다. NotEmpty()와 같은 특정 규칙은 클라이언트 측에서 작동하지만, 필요하지 않으면 반드시 필요합니다. 페이지 포스트 백을 확인하십시오. – Robin

답변

2

그것은 문제가 클라이언트 측 유효성 검사를 가능하게하고, 규칙이 실제로 후 다시 작업 보인다. FluentValidation wiki에 지정된대로, 유일하게 지원되는 클라이언트 쪽 규칙이

  • NOTNULL /는 NotEmpty
  • 일치 (정규식)
  • InclusiveBetween (범위)
  • 크레딧 카드
  • 이메일
  • EqualTo가 (교차 속성 평등 비교)
  • 길이

본질적으로 달성하려는 것은 기본적으로 지원되지 않습니다.

사용자 지정 클라이언트 측 FluentValidation 규칙 here의 예를 살펴보십시오.

+0

Thansk a bunch Serge! :) – Robin

0

당신은 때 조건이 규칙을 추가 할 수 있습니다 코멘트에서

RuleFor(x => x.Name) 
.NotEmpty() 
.When(x => string.IsNullOrEmpty(x.Company)) 
.WithMessage("Please fill in the company name or the customer name"); 

RuleFor(x => x.Company) 
.NotEmpty() 
.When(x => string.IsNullOrEmpty(x.Name)) 
.WithMessage("Please fill in the company name or the customer name"); 
+0

안녕하세요, 해답을 주셔서 감사합니다. 그러나 나는 분명히했습니다. 나는이 접근법을 시도하고 그것은 어떤 이유로 작동하지 않습니다. – Robin

관련 문제