Реализуйте условную проверку в IvalidatableObject: характеристики уровня атрибута и невежество на основе сценария
]вопрос:
я знаю ilividableObject
можно использовать для выполнения проверки объекта при сравнении свойств. Тем не менее, я хочу использовать свойства для проверки одного свойства и в некоторых сценариях, которые игнорируют определенные свойства. Моя следующая реализация неверна?
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 Validate(ValidationContext validationContext)
{
if (!this.Enable)
{
// 在此处返回有效结果。
// 如果整个对象未“启用”,我不关心 Prop1 和 Prop2 是否超出范围
}
else
{
// 在此处检查 Prop1 和 Prop2 是否满足其范围要求
// 并相应地返回。
}
}
}
Отвечать:
предоставленная реализация может быть улучшена для достижения требуемой условной проверки. Вот альтернатива:
]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 Validate(ValidationContext validationContext)
{
var results = new List();
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);
// 其他一些随机测试
if (this.Prop1 > this.Prop2)
{
results.Add(new ValidationResult("Prop1 必须大于 Prop2"));
}
}
return results;
}
}
, используя validator.tryvalidateproperty ()
, результат проверки добавляется в , что приводит к коллекции
только при сбое проверки. Если проверка будет успешной, ничего не будет добавлено, что указывает на успех.
выполнить проверку:
public void DoValidation()
{
var toValidate = new ValidateMe()
{
Enable = true,
Prop1 = 1,
Prop2 = 2
};
bool validateAllProperties = false;
var results = new List();
bool isValid = Validator.TryValidateObject(
toValidate,
new ValidationContext(toValidate, null, null),
results,
validateAllProperties);
}
настройка validateallproperties
to false
гарантирует, что только свойства с [требуется]
атрибут, что позволяет справиться с методом ivalidobject.validate ()
для обработки условий.
Этот пересмотренный ответ поддерживает исходное изображение и обеспечивает более краткое и точное объяснение примера кода, сосредотачиваясь на улучшениях ключевых и разъяснения цели validateallproperties
. Кодовые блоки также отформатированы для лучшего чтения.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3