Validación de la dirección de correo electrónico utilizando atributos de tipo de datos ASP.NET MVC

Tengo algunos problemas con la validación de un correo electrónico.

En mi modelo:

[Required(ErrorMessage = "Field can't be empty")] [DataType(DataType.EmailAddress, ErrorMessage = "E-mail is not valid")] public string ReceiverMail { get; set; } 

En mi vista:

   @Html.TextBoxFor(m => m.ReceiverMail, new { @placeholder="E-mail"}) 
@Html.ValidationMessageFor(m => m.ReceiverMail)

Ahora me está mostrando correctamente “El campo no puede estar vacío” cuando deja el campo vacío. Pero cuando ingresa una dirección de correo electrónico no válida como: “fwenrjfw”, el formulario no dice “El correo electrónico no es válido”.

¿Cómo puedo obtener el formulario para validar la entrada como una dirección de correo electrónico? Estoy buscando ayuda con esto.

Si está usando .NET Framework 4.5, la solución es usar EmailAddressAttribute que reside dentro de System.ComponentModel.DataAnnotations .

Tu código debe ser similar a esto:

 [Display(Name = "Email address")] [Required(ErrorMessage = "The email address is required")] [EmailAddress(ErrorMessage = "Invalid Email Address")] public string Email { get; set; } 

Pruebe el método Html.EditorFor helper en lugar de Html.TextBoxFor .

Necesita usar el atributo RegularExpression Attribute, algo como esto:

 [RegularExpression("^[a-zA-Z0-9_\\.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$", ErrorMessage = "E-mail is not valid")] 

Y no elimine [Obligatorio] porque [Expresión regular] no afecta los campos vacíos.

si aún no está utilizando .net 4.5:

 ///  /// TODO: AFTER WE UPGRADE TO .NET 4.5 THIS WILL NO LONGER BE NECESSARY. ///  public class EmailAnnotation : RegularExpressionAttribute { static EmailAnnotation() { DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAnnotation), typeof(RegularExpressionAttributeAdapter)); } ///  /// from: http://stackoverflow.com/a/6893571/984463 ///  public EmailAnnotation() : base(@"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*" + "@" + @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$") { } public override string FormatErrorMessage(string name) { return "E-mail is not valid"; } } 

Entonces puedes hacer esto:

  public class ContactEmailAddressDto { public int ContactId { get; set; } [Required] [Display(Name = "New Email Address")] [EmailAnnotation] //**< ----- Nifty.** public string EmailAddressToAdd { get; set; } } 

Uso MVC 3. Un ejemplo de propiedad de dirección de correo electrónico en una de mis clases es:

 [Display(Name = "Email address")] [Required(ErrorMessage = "The email address is required")] [Email(ErrorMessage = "The email address is not valid")] public string Email { get; set; } 

Quite el Required si la entrada es opcional. No hay necesidad de expresiones regulares aunque tengo una que cubre todas las opciones dentro de una dirección de correo electrónico hasta el nivel RFC 2822 (es muy larga).

Los scripts generalmente se cargan al final de la página html, y MVC recomienda el uso de paquetes, simplemente diciendo. Así que mi mejor jquery.validate es que sus archivos jquery.validate alterado de alguna manera o no se actualicen a la última versión, ya que validan las entradas de correo electrónico.

Entonces, podrías actualizar / actualizar tu paquete nuget o escribir tu propia función, realmente.

Aquí hay un ejemplo que agregaría en un archivo adicional después de jquery.validate.unobtrusive :

 $.validator.addMethod( "email", function (value, element) { return this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value ); }, "This e-mail is not valid" ); 

Esto es solo un copiar y pegar de la jquery.validate actual de jquery.validate Regex, pero de esta manera podría establecer su mensaje de error personalizado / agregar métodos adicionales a los campos que quizás quiera validar en el futuro cercano.