implemente a verificação condicional no IVALIDABLEOBJET: características do nível de atributo e ignorância baseada em cenário
pergunta:
eu sei ivalidableObject
pode ser usado para executar a validação do objeto ao comparar Propriedades. No entanto, quero usar propriedades para validar uma única propriedade e em alguns cenários que ignoram propriedades específicas falham. Minha seguinte implementação está incorreta?
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 是否满足其范围要求
// 并相应地返回。
}
}
}
Responder:
A implementação fornecida pode ser aprimorada para obter a verificação condicional necessária. Aqui está uma 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 ()
, o resultado da verificação é adicionado ao resulta na coleção
somente quando a verificação falha. Se a verificação for bem -sucedida, nada será adicionado, indicando sucesso.
Execute Verificação:
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);
}
configuração validateAllProperties
para false
garante que apenas as propriedades com o atributo [requerir]
sejam verificadas, permitir o método ivalidoBject.validate (& & &&] Método.
validateAlLProperties . Os blocos de código também são formatados para melhor leitura.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3