在一般的自定義驗證特性中,我們通過繼承ValidationAttribute,實現IClientValidatable,只能完成對某個屬性的自定義驗證。
使用IValidatableObject可以完成Model級別的驗證。
□ 實現IValidatableObject介面的Model
public class RegisterModel : IValidatableObject
{
public int RegisterCount{get;set;}
public int Qutoa{get;set;}
//實現IValidatableObject介面方法,實現自定義驗證
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var results = new List<ValidationResult>();
if (RegisterCount > Quota)
{
results.Add(new ValidationResult("報名人數已經超過名額限制", new string[] { "RegisterCount" }));
}
if (RegisterCount>3)
{
results.Add(new ValidationResult("單次最多報名三位學員", new string[] { "RegisterCount" }));
}
return results;
}
}
可見,在Model級別就自定義了驗證規則。