2017-01-16 2 views
1

MVC 외부에서 DataAnnotations.Validator를 활용하려고합니다. 나는 그들의 각각의 모델을 검증하는 두 가지 서비스를 가지고있다. 두 모델 모두 ValidateModel() 메서드를 가진 내가 쓴 Base 클래스에서 상속합니다.TryValidateObject가 Range에서 결과를 반환하지 않습니다.

public class BaseValidatableDomainModel : IValidatableDomainModel 
{ 
    public BaseValidatableDomainModel() 
    { 
     ModelState = new ModelStateDictionary(); 
    } 

    public ModelStateDictionary ModelState { get; set; } 

    public virtual void ValidateModel() 
    { 
     var validationContext = new ValidationContext(this, serviceProvider: null, items: null); 
     var results = new List<ValidationResult>(); 
     Validator.TryValidateObject(this, validationContext, results); 
     foreach (var thisInvalidResult in results) 
     { 
      ModelState.AddModelError(thisInvalidResult.MemberNames.FirstOrDefault(),thisInvalidResult.ErrorMessage); 
     } 
    } 
} 

나는 데이터가 무효 인 경우에 서비스를 확인 각 서비스에 대한 테스트가 제대로 작동합니다.

public class CompanyAddressDomainModel : BaseValidatableDomainModel 
{ 
    // Other fields 
    [Required] 
    [Range(1, int.MaxValue, ErrorMessage = "Company is required")] 
    public int CompanyId { get; set; } 
    [Required] 
    public AddressInputDomainModel Address { get; set; } 
} 

코드는 다음과 같이 검증을 호출 :

한 모델 PhoneNumber == null에 대한 제대로 오류 : CompanyId은 0 회사 ID가이 정의되어있는 경우

[Required] 
public string PhoneNumber { get; set; } 

그러나, 다른 모델은 오류가 없습니다

CompanyAddressDomainModel companyAddress = // set values 

companyAddress.ValidateModel(); 
if (!companyAddress.ModelState.IsValid) 
{ 
    return companyAddress; 
} 

왜 다른 인증이 아닌 일부 인증을 잡을까요? 내가 알 수있는 한, 두 서비스와 모델은 동일하게 정의됩니다. 추가 정보가 필요하면 알려주십시오.

CompanyId == 0Address == null으로 테스트 한 경우 주소 오류가 표시되지만 CompanyId 오류는 표시되지 않습니다.

답변

1

TryValidateObject에게 모두 유효성을 검사하도록 지시해야하는 것처럼 보입니다. 이처럼

public static bool TryValidateObject(
    object instance, 
    ValidationContext validationContext, 
    ICollection<ValidationResult> validationResults, 
    bool validateAllProperties 
) 

:

Validator.TryValidateObject(this, validationContext, results, true); 
관련 문제