私は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 == 0
とAddress == null
でテストした場合、アドレスエラーが表示されますが、CompanyIdエラーは表示されません。