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 == 0
및 Address == null
으로 테스트 한 경우 주소 오류가 표시되지만 CompanyId 오류는 표시되지 않습니다.