문제

나는 순관에 대한 완전한 검증을 받았으며 그것을 처리하는 가장 좋은 방법을 알아 내려고 노력하고 있습니다.

다음 수업이 주어지면 :

public class LetterResponse {
 public Guid Id {get;set;}
 public bool SendBlankCart {get;set;}
 public string ToName {get;set;}
 public string ToAddress {get;set;}
}

클래스를 유지하기 전에 클래스를 검증하기 위해 데이터 알노 화와 XVal을 사용하고 싶지만 둘 이상의 속성이 필요한 복잡한 검증이 있습니다.

가짜:

if SendBlankCart {
 - no validation on ToName, ToAddress 
} else {
 ToName - required.
 ToAddress - required. 
}

다음과 같이 주석을 달고 싶습니다.

[LetterResponseValidator]
public class LetterResponse {
 public Guid Id {get;set;}
 public bool SendBlankCart {get;set;}
 public string ToName {get;set;}
 public string ToAddress {get;set;}
}

다음과 같은 유효성 검사 규칙이 있습니다.

public class LetterResponseValidator : ValidationAttribute
    {
        public override bool IsValid(object value)
        {
            if (value.GetType() == typeof(LetterResponse))
            {
                var letterResponse = (letterResponse) value;
                if (letterResponse.SendBlankCard)
                {
                    return true;
                } else
                {
                    if (string.IsNullOrEmpty(letterResponse.FromDisplayName) || string.IsNullOrEmpty(letterResponse.ToAddress1))
                    {
                        return false;
                    }
                    return true;
                }

            }
            return false;
        }
    }

매개 변수가 LetterResponse 클래스의 인스턴스가 될 것으로 기대하지만 Validation Runner에서 호출되지 않습니까?

누구든지 이것을 처리하는 방법을 알고 있습니까?

감사,

도움이 되었습니까?

해결책

나는 이것이 당신이 클래스 수준의 유효성 검사기가 있다는 사실과 관련이 없다고 생각합니다. 연결을 제외하려면 더미 필수 검증기를 "Toname"에 적용하고 유효성 검사기가 호출되었는지 확인하십시오.

호출되는 경우, 그렇지 않은 경우 Global.asax.cs 파일의 DataAnnotationsModelBinder를 사용하여 표준 ModelBinder를 재정의했는지 확인해야합니다.

ModelBinders.Binders.DefaultBinder = new DataAnnotationsModelBinder();

이과 완전히 작동하는 데모 프로젝트에 대한 자세한 내용은이 글을 읽으십시오. 클라이언트 측 유효성 검사에 대한 블로그 기사.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top