mvc for dataannotations data custom asp annotation asp.net-mvc-2 data-annotations client-side-validation

asp.net mvc 2 - for - Validación del lado del cliente de las anotaciones de datos de ASP.NET MVC con RegularExpressionAttribute heredado



model validation mvc (2)

Deberá registrar un adaptador de validación del lado del cliente para su atributo personalizado. En este caso, puede usar el RegularExpressionAttributeAdapter existente en System.Web.Mvc, ya que debería funcionar exactamente igual que el atributo regex estándar. Luego regístrelo cuando su aplicación comience a usar:

DataAnnotationsModelValidatorProvider.RegisterAdapter( typeof(MailAddressAttribute), typeof(RegularExpressionAttributeAdapter));

Si escribe un atributo que requiera una validación personalizada del lado del cliente, puede implementar su propio adaptador heredando de DataAnnotationsModelValidator (vea también el blog de Phil Haack ).

Para mantener limpia la validación de mi modelo, me gustaría implementar mis propios atributos de validación, como EmailAttribute y EmailAttribute . Algunos de estos pueden implementarse favorablemente como clases simples que heredan de RegularExpressionAttribute .

Sin embargo, noté que hacer esto rompe la validación del lado del cliente de estos atributos. Supongo que hay algún tipo de enlace de tipo que falla en alguna parte.

¿Alguna idea de qué puedo hacer para que la validación del lado del cliente funcione?

Ejemplo de código :

public sealed class MailAddressAttribute : RegularExpressionAttribute { public MailAddressAttribute() : base(@"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+/.[A-Za-z]{2,4}$") { } }


extendiendo la respuesta correcta

public class EmailAttribute : RegularExpressionAttribute { static EmailAttribute() { DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAttribute), typeof(RegularExpressionAttributeAdapter)); } public EmailAttribute() : base(@"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+/.[a-zA-Z0-9-.]+$") //^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+/.[a-zA-Z0-9-.]+$ { } }