mvc data custom annotation asp.net asp.net-mvc-2 data-annotations

asp.net - data - Cómo crear Validadores de Anotación de Datos Personalizados



custom validation data annotation mvc (2)

Para crear un validador de anotación de datos personalizado, siga estas líneas de guides:

  1. Tu clase debe heredar de la clase System.ComponentModel.DataAnnotations.ValidationAttribute .
  2. bool IsValid(object value) método bool IsValid(object value) e implemente la lógica de validación dentro de él.

Eso es.

IMPORTANTE Precaución

A veces los desarrolladores comprueban que el valor no es nulo / vacío y devuelve falso. Este suele ser un comportamiento incorrecto, porque eso está en el validador Required para verificar, lo que significa que sus validadores personalizados solo deberían validar datos que no sean nulos, sino que devuelvan true contrario (ver ejemplo). Esto los hará utilizables en campos obligatorios (obligatorios) y no obligatorios.

Ejemplo

public class StringLengthRangeAttribute : ValidationAttribute { public int Minimum { get; set; } public int Maximum { get; set; } public StringLengthRangeAttribute() { this.Minimum = 0; this.Maximum = int.MaxValue; } public override bool IsValid(object value) { string strValue = value as string; if (!string.IsNullOrEmpty(strValue)) { int len = strValue.Length; return len >= this.Minimum && len <= this.Maximum; } return true; } }

Todas las propiedades se pueden establecer en el atributo que desee configurar.
Algunos ejemplos:

[Required] [StringLengthRange(Minimum = 10, ErrorMessage = "Must be >10 characters.")] [StringLengthRange(Maximum = 20)] [Required] [StringLengthRange(Minimum = 10, Maximum = 20)]

Cuando una propiedad en particular no está configurada, su valor se establece en el constructor, por lo que siempre tiene un valor. En los ejemplos de uso anteriores, agregué deliberadamente el validador Required también, por lo que está en sintonía con la precaución anterior que he escrito.

Importante

Entonces este validador funcionará en el valor de su modelo que no es necesario, pero cuando está presente lo valida (piense en un campo de texto en un formulario web, eso no es obligatorio, pero si un usuario ingresa un valor, debe ser válido) .

Querer crear una validación de anotación de datos personalizada. ¿Hay alguna guía / muestra útil sobre cómo crearlos?

En primer lugar:
StringLength con longitud mínima y máxima. Soy consciente de que .NET 4 puede hacer esto, pero quiero hacer lo mismo en .NET 3.5, si es posible, definir solo la longitud mínima (al menos x caracteres), la longitud máxima solamente (hasta x caracteres) o ambos (entre x y y caracteres).

En segundo lugar:
Validación usando la aritmética de módulo: si el número es una longitud válida, deseo validar usando el algoritmo de Modulo 11 (ya lo he implementado en JavaScript, ¿entonces supongo que sería una simple transferencia?)

Actualizar:
El segundo problema resuelto fue simplemente una copia de la implementación de JavaScript y algunos ajustes, por lo que no es necesario encontrar una solución.


Use CustomValidationAttribute junto con una función de validación con firma

public static ValidationResult Validate(MyType x, ValidationContext context)

Ejemplo (para una propiedad de cadena)

using System.ComponentModel.DataAnnotations; public class MyClass { [CustomValidation(typeof(MyClass), "Validate")] public string MyProperty { get; set; } public static ValidationResult Validate(string x, ValidationContext context) { return (x == "valid") ? new ValidationResult(null) : ValidationResult.Success; } }