2010-08-04 4 views
2

데이터 주석을 사용하는 하나의 속성에 대한 유효성 검사를 무시할 수 있는지 알고 싶습니다. 여러 페이지에 걸쳐 모델을 사용하기 때문에 일부 모델에는 필요하지만 다른 모델에는 필요하지 않은 모델이 있으므로이를 무시하고 싶습니다.ASP.NET MVC 2에서 바이너리 데이터 주석 유효성 검사

탁 치!

+0

나는이에 잠시 다시 비슷한 일을 물었다. http://stackoverflow.com/questions/2503735/conditional-required-attribute-for-validation 필자는 자체 검증 시스템을 작성해야만했습니다. 당신은 그것을 처리 할 수있는 자신의 모델 바인더를 작성할 수 있을지 모르지만, 나는 그것에 대해 전혀 모른다. – jeriley

+0

... 그래서 각보기에 대해 별도의보기 모델을 만들어야한다고 말합니다. – Necros

답변

1

당신은 외부 검증 클래스로 사용 FluentValidation을 사용할 수 있습니다. 이 경우 각 시나리오에 대해 다른 유효성 검사기 클래스를 구현합니다.

http://fluentvalidation.codeplex.com/

예 : - 짧은 대답이 '아니오'

using FluentValidation; 
public class CustomerValidator: AbstractValidator<Customer> { 
    public CustomerValidator() { 
     RuleFor(customer => customer.Surname).NotEmpty(); 
     RuleFor(customer => customer.Forename).NotEmpty() 
      .WithMessage("Please specify a first name"); 
    } 
} 

public class CustomerValidator2: AbstractValidator<Customer> { 
    public CustomerValidator() { 
     RuleFor(customer => customer.Surname).NotEmpty(); 
    } 
} 

Customer customer = new Customer(); 

CustomerValidator validator = new CustomerValidator(); 
ValidationResult results = validator.Validate(customer); 

CustomerValidator2 validator2 = new CustomerValidator2(); 
ValidationResult results2 = validator2.Validate(customer); 

results would have 2 validation errors 
results2 would have 1 validation error for the same customer 
1

데이터 주석으로는 가능하지 않습니다. Microsoft Enterprise Library 유효성 검사 응용 프로그램 블록은 규칙 세트의 유효성을 그룹화하는 개념을 가지고 있습니다. 이렇게하면 여러 규칙 세트 (예 : 기본 룰 세트 및 일부 페이지의 확장 룰 세트)에서 오브젝트의 유효성을 검증 할 수 있습니다. 데이터 주석에는 규칙 세트와 같은 것이 없습니다.

여기 VAB를 사용하는 예입니다

public class Subscriber 
{ 
    [NotNullValidator] 
    [StringLengthValidator(1,200)] 
    public string Name { get; set; } 

    [NotNullValidator(Ruleset="Persistence")] 
    [EmailAddressValidator] 
    public string EmailAddress { get; set; } 
} 
관련 문제