您的位置:首页 > 移动开发 > Objective-C

How do I use IValidatableObject? 使用IValidatableObject添加自定义属性验证

2018-01-17 20:10 423 查看
Here's how to accomplish what I was trying to do.

Validatable class:

public class ValidateMe : IValidatableObject
{
[Required]
public bool Enable { get; set; }

[Range(1, 5)]
public int Prop1 { get; set; }

[Range(1, 5)]
public int Prop2 { get; set; }

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var results = new List<ValidationResult>();
if (this.Enable)
{
Validator.TryValidateProperty(this.Prop1,
new ValidationContext(this, null, null) { MemberName = "Prop1" },
results);
Validator.TryValidateProperty(this.Prop2,
new ValidationContext(this, null, null) { MemberName = "Prop2" },
results);

// some other random test
if (this.Prop1 > this.Prop2)
{
results.Add(new ValidationResult("Prop1 must be larger than Prop2"));
}
}
return results;
}
}

Using
Validator.TryValidateProperty()
will add to the results collection if there are failed validations. If there is not a failed validation then nothing will be add to the result collection which is an indication of success.

Doing the validation:

public void DoValidation()
{
var toValidate = new ValidateMe()
{
Enable = true,
Prop1 = 1,
Prop2 = 2
};

bool validateAllProperties = false;

var results = new List<ValidationResult>();

bool isValid = Validator.TryValidateObject(
toValidate,
new ValidationContext(toValidate, null, null),
results,
validateAllProperties);
}

It is important to set
validateAllProperties
to false for this method to work. When
validateAllProperties
is false only properties with a
[Required]
attribute are checked. This allows the
IValidatableObject.Validate()
method handle the conditional validations.

https://stackoverflow.com/questions/3400542/how-do-i-use-ivalidatableobject
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐