Pregunta

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 se puede usar 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.

¿Fue útil?

Solución

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

Dado que RegularAxpressionAttribute 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

Otros consejos

La página CustomValidationAttribute Clase MSDN Tiene algunos ejemplos ahora. La publicación de Phil atrapada está desactualizada.

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

¿Ha 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;
  }
}

Este 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);
}

Deberá Google DataNoTations, ya que necesita obtener el proyecto y compilarlo. Lo haría, pero necesito salir aquí para un largo con final.

Espero que esto ayude.

EDITAR

Encontré esto como un Google rápido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top