Cómo crear un atributo de validación personalizado para MVC

Me gustaría crear un atributo de validación personalizado para MVC2 para una dirección de correo electrónico que no herede de RegularExpressionAttribute pero que pueda usarse en la validación del cliente. ¿Alguien puede señalarme en la dirección correcta?

Intenté algo tan simple como esto:

[AttributeUsage( AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false )] public class EmailAddressAttribute : RegularExpressionAttribute { public EmailAddressAttribute( ) : base( Validation.EmailAddressRegex ) { } } 

pero no parece funcionar para el cliente. Sin embargo, si uso RegularExpression (Validation.EmailAddressRegex)] parece funcionar bien.

Debe registrar un adaptador para el nuevo atributo para habilitar la validación del lado del cliente.

Como RegularExpressionAttribute ya tiene un adaptador, que es RegularExpressionAttributeAdapter, todo lo que tiene que hacer es reutilizarlo.

Use un constructor estático para mantener todo el código necesario dentro de la misma clase.

 [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)] public class EmailAddressAttribute : RegularExpressionAttribute { private const string pattern = @"^\w+([-+.]*[\w-]+)*@(\w+([-.]?\w+)){1,}\.\w{2,4}$"; static EmailAddressAttribute() { // necessary to enable client side validation DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAddressAttribute), typeof(RegularExpressionAttributeAdapter)); } public EmailAddressAttribute() : base(pattern) { } } 

Para obtener más información, consulte esta publicación que explica el proceso completo. http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

La página MSDN CustomValidationAttribute Class tiene algunos ejemplos ahora. La publicación de Phil Haacked está desactualizada.

Mire el validador de propiedad dependiente universal en este artículo

¿Has intentado usar anotaciones de datos?

Este es mi proyecto de Anotaciones usando System.ComponentModel.DataAnnotations;

 public class IsEmailAddressAttribute : ValidationAttribute { public override bool IsValid(object value) { //do some checking on 'value' here return true; } } 

Esto está en mi proyecto de Modelos

 namespace Models { public class ContactFormViewModel : ValidationAttributes { [Required(ErrorMessage = "Please provide a short message")] public string Message { get; set; } } } 

Este es mi controlador

 [AcceptVerbs(HttpVerbs.Post)] public ActionResult ContactUs(ContactFormViewModel formViewModel) { if (ModelState.IsValid) { RedirectToAction("ContactSuccess"); } return View(formViewModel); } 

Necesitarás googlear las anotaciones de datos, ya que necesitas tomar el proyecto y comstackrlo. Lo haría pero tengo que salir de aquí por un largo tiempo.

Espero que esto ayude.

EDITAR

Encontré esto como un Google rápido.