web-dev-qa-db-fra.com

Validation d'adresse électronique à l'aide d'attributs 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 string ReceiverMail { get; set; }

À mon avis:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

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

Maintenant, il me montre correctement "Le champ ne peut pas être vide" lorsque vous laissez le champ vide. Mais lorsque vous remplissez une adresse électronique non valide telle que: "fwenrjfw", le formulaire ne dit pas "L'e-mail n'est pas valide".

Comment puis-je obtenir le formulaire pour valider la saisie en tant qu'adresse e-mail? Je cherche de l'aide pour cela.

150
Java Afca

Si vous utilisez .NET Framework 4.5, la solution consiste à utiliser EmailAddressAttribute 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 string Email { get; set; }
307

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

38
hazimdikenli

Vous devez utiliser RegularExpression Attribute, 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.

19
Alexander Imra

si vous n'utilisez pas encore .net 4.5:

/// <summary>
/// TODO: AFTER WE UPGRADE TO .NET 4.5 THIS WILL NO LONGER BE NECESSARY.
/// </summary>
public class EmailAnnotation : RegularExpressionAttribute
{
    static EmailAnnotation()
    {
        DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAnnotation), typeof(RegularExpressionAttributeAdapter));
    }

    /// <summary>
    /// from: http://stackoverflow.com/a/6893571/984463
    /// </summary>
    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";
    }
}

Ensuite, vous pouvez faire ceci:

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

J'utilise MVC 3. Voici un exemple de propriété d'adresse de messagerie dans l'une de mes classes:

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

Supprimez la 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 dans une adresse email jusqu'au niveau RFC 2822 (c'est très long).

10
Peter Smith
[Required(ErrorMessage = "Please enter Social Email id")]
    [DataType(DataType.EmailAddress)]
    [EmailAddress]
    public string Email { get; set; }
4

Les scripts sont généralement chargés à la fin de la page html, et MVC recommande l’utilisation de bundles. Mon meilleur choix est donc que vos fichiers jquery.validate aient été modifiés de quelque manière que ce soit ou ne sont pas mis à jour à la dernière version, car ils valident les entrées de courrier électronique.

Vous pouvez donc mettre à jour/actualiser votre paquet de nugets ou écrire votre propre fonction, vraiment.

Voici un exemple que vous ajouteriez 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"
);

Il ne s'agit que d'un copier-coller du regex jquery.validate actuel, mais vous pouvez ainsi définir votre message d'erreur personnalisé/ajouter des méthodes supplémentaires aux champs que vous voudrez peut-être valider dans un proche avenir.

0
Tiramonium

Utilisé le code ci-dessus dans le projet MVC5 et cela fonctionne complètement bien avec l'erreur de validation. Essayez juste ce code

   [Required]
   [Display(Name = "Email")]
   [EmailAddress]

   [RegularExpression(@"^([A-Za-z0-9][^'!&\\#*$%^?<>()+=:;`~\[\]{}|/,₹€@ ][a-zA-z0- 
    9-._][^!&\\#*$%^?<>()+=:;`~\[\]{}|/,₹€@ ]*\@[a-zA-Z0-9][^!&@\\#*$%^?<> 
        ()+=':;~`.\[\]{}|/,₹€ ]*\.[a-zA-Z]{2,6})$", ErrorMessage = "Please enter a 
   valid Email")]


   public string ReceiverMail { get; set; }
0
Kalyani Rathore