Validation des adresses e-mail à l’aide des atsortingbuts de type de données ASP.NET MVC

J’ai des problèmes avec la validation d’un email.

Dans mon modèle:

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

À mon avis:

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

Maintenant, il me montre correctement que “le champ ne peut pas être vide” lorsque vous laissez le champ vide. Mais lorsque vous remplissez une adresse e-mail invalide telle que: “fwenrjfw”, le formulaire ne dit pas “L’e-mail n’est pas valide”.

Comment puis-je obtenir le formulaire pour valider l’entrée comme une adresse e-mail? Je cherche de l’aide avec ça.

Si vous utilisez .NET Framework 4.5, la solution consiste à utiliser EmailAddressAtsortingbute qui réside dans System.ComponentModel.DataAnnotations .

Votre code devrait ressembler à ceci:

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

Essayez la méthode d’assistance Html.EditorFor au lieu de Html.TextBoxFor .

Vous devez utiliser l’atsortingbut RegularExpression, quelque chose comme ceci:

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

Et ne supprimez pas [Obligatoire] car [RegularExpression] n’affecte pas les champs vides.

si vous n’utilisez pas encore .net 4.5:

 ///  /// TODO: AFTER WE UPGRADE TO .NET 4.5 THIS WILL NO LONGER BE NECESSARY. ///  public class EmailAnnotation : RegularExpressionAtsortingbute { static EmailAnnotation() { DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAnnotation), typeof(RegularExpressionAtsortingbuteAdapter)); } ///  /// 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 ssortingng FormatErrorMessage(ssortingng name) { return "E-mail is not valid"; } } 

Ensuite, vous pouvez le faire:

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

J’utilise MVC 3. Un exemple de propriété d’adresse de messagerie dans l’une de mes classes est:

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

Supprimez le Required si l’entrée est facultative. Pas besoin d’expressions régulières bien que j’en ai une qui couvre toutes les options d’une adresse email jusqu’au niveau RFC 2822 (c’est très long).

Les scripts sont généralement chargés à la fin de la page HTML, et MVC recommande l’utilisation de bundles, en disant simplement. Donc, mon meilleur pari est que vos fichiers jquery.validate été modifiés d’une manière ou d’une autre ou ne sont pas mis à jour vers la dernière version, car ils valident les entrées de courrier électronique.

Vous pouvez donc mettre à jour / rafraîchir votre paquet nuget ou écrire votre propre fonction, vraiment.

Voici un exemple que vous appendiez dans un fichier supplémentaire après 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" ); 

Ceci est juste un copier-coller du jquery.validate cours, mais de cette façon vous pouvez définir votre message d’erreur personnalisé / append des méthodes supplémentaires aux champs que vous voudrez peut-être valider dans un avenir proche.