ASP.NET MVC에서 조건부 유효성 검사 구현
ASP.NET MVC의 데이터 주석은 모델 속성에 대한 유효성 검사를 수행하는 편리한 방법을 제공합니다. 그러나 때로는 필드의 유효성이 다른 필드의 값에 따라 달라지는 조건부 유효성 검사 규칙을 구현해야 할 수도 있습니다.
예: 조건부 필수 항목
다음 시나리오를 고려해보세요. "IsSenior" 속성이 포함된 "Person" 모델과 설명이 포함된 "Senior" 속성이 있습니다. "IsSenior"가 true로 설정된 경우에만 "Senior.Description" 속성이 필수 필드가 되기를 원합니다.
데이터 주석 방법
데이터 주석만으로는 불가능합니다. 다음 코드는 이러한 제한 사항을 보여줍니다.
<code class="language-csharp">public class Person { [Required(ErrorMessage = "*")] public string Name { get; set; } public bool IsSenior { get; set; } public Senior Senior { get; set; } } public class Senior { [Required(ErrorMessage = "*")] public string Description { get; set; } }</code>
IValidatableObject 메서드
ASP.NET MVC 3에는 IValidatableObject 인터페이스를 사용하여 조건부 유효성 검사를 위한 더 나은 솔루션이 도입되었습니다. 모델은 이 인터페이스를 구현하고 ValidationContext 매개 변수를 허용하는 Validate 메서드를 제공해야 합니다. 이 메서드는 사용자 지정 유효성 검사 논리를 수행하고 오류가 발견되면 ValidationResult 개체 컬렉션을 반환할 수 있습니다.
<code class="language-csharp">public class Person : IValidatableObject { public string Name { get; set; } public bool IsSenior { get; set; } public Senior Senior { get; set; } public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { if (IsSenior && String.IsNullOrEmpty(Senior?.Description)) yield return new ValidationResult("必须提供描述。"); } }</code>
IValidatableObject 인터페이스를 구현함으로써 이제 "IsSenior" 값을 기반으로 조건부 유효성 검사를 수행할 수 있습니다. "IsSenior"가 true인 경우 "Senior.Description" 속성이 필수 필드가 됩니다.
구문 개선(C# 6.0 이상)
C# 6.0 이상에서는 식 본문 멤버를 사용하여 Validate 메서드를 단순화할 수 있습니다.
<code class="language-csharp">public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) => IsSenior && String.IsNullOrEmpty(Senior?.Description) ? new[] { new ValidationResult("必须提供描述。") } : Enumerable.Empty<ValidationResult>();</code>
위의 방법을 통해 ASP.NET MVC에서 조건부 검증을 효과적으로 구현할 수 있습니다. Senior.Description에 안전하게 액세스하고 null 참조 예외를 방지하려면 null 조건부 연산자(?.)를 사용하세요.
위 내용은 ASP.NET MVC에서 조건부 유효성 검사를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!