İValidatableObject nasıl kullanırım?
IValidatableObject
hadi birbirinize karşı özelliklerini karşılaştıran bir şekilde bir nesne doğrulamak için kullanılır anlıyorum.
Hala nitelikler bireysel özelliklerini doğrulamak için almak istiyorum, ama bazı durumlarda bazı özellikleri hataları görmezden gelmek istiyorum.
Yanlış durumda kullanmaya altında mıyım? Bunu nasıl uygularım?
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)
{
if (!this.Enable)
{
/* Return valid result here.
* I don't care if Prop1 and Prop2 are out of range
* if the whole object is not "enabled"
*/
}
else
{
/* Check if Prop1 and Prop2 meet their range requirements here
* and return accordingly.
*/
}
}
}
CEVAP
Öncelikle, @paper1337 doğru kaynakları için beni işaret için teşekkürler...ona oy ne kadar kayıtlı değilim, lütfen bunu başka yazıyorsa bunu yapın.
Yapmaya çalıştığım şeyi başarmak için.
Sınıf Validatable:
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;
}
}
Validator.TryValidateProperty()
kullanıyorsanız doğrulaması başarısız olursa orada sonuçları koleksiyonuna katacak. Eğer başarısız bir doğrulama daha sonra ise orada hiçbir şey başarı göstergesi olduğu sonucu koleksiyonuna eklemek olacak.
Doğrulama yapıyor:
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);
}
Önemli bu yöntemi yanlış validateAllProperties
işe koyuldu. validateAllProperties
false [Required]
niteliği ile sadece özellikleri kontrol edilir. Bu IValidatableObject.Validate()
yöntemi koşullu doğrulamalarını ele verir.
Nasıl C kaynak dosyaları arasında pay ...
Nasıl bir özel durum olduğunu doğrulam...
Nasıl RelativeSource ile WPF bağlamala...
Nasıl C diziler kullanırım ?...
Nasıl durum çubuğunun altında ActionBa...