Implementar verificación condicional en iVivalidateBject: características de nivel de atributo e ignorancia basada en escenarios
pregunta:
yo sé ivalidableObject
se puede usar para realizar la validación de objetos al comparar las propiedades. Sin embargo, quiero usar propiedades para validar una sola propiedad y en algunos escenarios que ignoran las propiedades específicas faltan. ¿Es incorrecta mi siguiente implementación?
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 是否满足其范围要求
// 并相应地返回。
}
}
}
Respuesta:
La implementación proporcionada se puede mejorar para lograr la verificación condicional requerida. Aquí hay una alternativa:
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;
}
}
usando validator.tryValidateProperty ()
, el resultado de verificación se agrega a los resultados en la colección
solo cuando la verificación falla. Si la verificación es exitosa, no se agregará nada, lo que indica éxito.
Ejecutar Verificación:
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);
}
setting validateAllProperties
to false
asegura que solo las propiedades con el atributo [requerido]
están verificados, permitiendo el método ivalidateBject.validate ()
para manejar la validación condicional.
Esta respuesta revisada mantiene la imagen original y proporciona una explicación más concisa y precisa del ejemplo del código, centrándose en las mejoras clave y aclarando el propósito de validateAlproperties
. Los bloques de código también están formateados para una mejor lectura.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3