2013-12-17 1 views

답변

16

자신 만의 ValidationAttribute을 구현할 수 있습니다. 아마도 다음과 같은 것일 수 있습니다.

public class RequireWhenCategoryAttribute : ValidationAttribute 
{ 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     var employee = (EmployeeModel) validationContext.ObjectInstance; 
     if (employee.CategoryId == 1) 
     { 
      return ValidationResult.Success; 
     } 
     var emailStr = value as String; 
     return string.IsNullOrEmpty(emailStr) ? new ValidationResult("Value is required.") : ValidationResult.Success; 
    } 
} 

public sealed class EmployeeModel 
{ 
    [Required] 
    public int CategoryId { get; set; } 
    [RequireWhenCategory] 
    public string Email { get; set; } // If CategoryId == 1 then it is required 
} 

이것은 단지 예제 일뿐입니다. 전송 문제가있을 수 있으며이 문제를 해결하기위한 최선의 방법이라고 확신하지 못합니다.

+0

"*이 문제를 해결하는 가장 좋은 방법인지는 잘 모르겠다. *"문제를 해결하기위한 다른 접근 방법은 무엇입니까? –

+0

@ScottChamberlain 우수 질문! 나는 모른다. 나는 이것이 어떻게 든 새는 추상화라고 느낀다. 유효성 검사를 수행하는 속성은 모델 유형 등에 대해 많이 알고 있습니다. 속성을 통해이 작업을 수행해야합니까? 모델이 동작에 대해 너무 많이 알고 모델의 단순성을 잃어버린 것처럼 느낍니다. 컨트롤러가 다음 작업을 수행해야합니까? 나는 아직도 확실하지 않다. – vcsjones

+2

@ vcsjones : 좋은 방법입니다. 컨트롤러에서 유효성 검사 로직을 피하고 싶습니다. 변경 요구 사항에 따라 필요한 변경 사항이 많이 필요하기 때문에, 원하지 않습니다. –

관련 문제