2017-01-16 22 views
1

私はMVA以外でDataAnnotations.Validatorを利用しようとしています。私はそれぞれのモデルを検証する2つのサービスを持っています。どちらのモデルも、ValidateModel()メソッドを持っていたBaseクラスから継承しています。TryValidateObjectが範囲内の結果を返さない

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); 
     } 
    } 
} 

データが無効な場合にサービスが正しく動作するかどうかを確認する各サービスについてテストしました。一つのモデルが正しくPhoneNumber == nullのためのエラー:

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

しかし、他のモデルCompanyIdが0たCompanyId時にエラーはありませんが、このように定義されています

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; } 
} 

コードは次のように検証を呼び出し、

CompanyAddressDomainModel companyAddress = // set values 

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

なぜいくつかの検証が行われますが、他は検証されません。私が知る限り、2つのサービスとモデルは同じように定義されています。さらに情報が必要な場合は、私に知らせてください。

私が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); 
関連する問題