61 votes

Validation du modèle de courrier électronique avec DataAnnotations et DataType

J'ai le modèle suivant :

public class FormularModel
{
    [Required]
    public string Position { get; set; }
    [Required]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }
    [Required]
    public string Webcode { get; set; }
}

La validation requise fonctionne bien. Mais lorsque j'essaie avec DataType, il ne réagit pas.

Voici mon code razor pour le contrôle de l'email :

   @Html.TextBoxFor
          (model => model.Email, 
           new { @style = "width: 175px;", @class = "txtField" }
          ) * 

Alors, quelqu'un a une réponse ?

TIA

8voto

jrummell Points 23718

Le site DataAnnotationsExtensions Le projet a un Attribut de l'email que vous pouvez utiliser.

0 votes

J'ai déjà utilisé celui-ci. Plutôt bon aussi ! J'ai essayé de me souvenir du nom mais je n'ai pas réussi à l'avoir en tête. J'ai fini par suggérer MVC 3 Futures.

3voto

Aliostad Points 47792

J'ai regardé le code source (rétroconception par Reflector) et DataType Les variantes ne sont en fait même pas mises en œuvre ! (C'était pour DateType.Date )

Donc ça ne va pas marcher.

J'utiliserais personnellement RegexValidation pour le courrier électronique.


Pour plus de clarté, voici l'implémentation de IsValid en classe DataTypeAttribute :

public override bool IsValid(object value)
{
    return true;
}

2 votes

Hehehe... tout est valable ! =)

0 votes

La validation par regex des adresses électroniques est une très mauvaise idée ; la RFC autorise trop de permutations bizarres pour qu'une regex soit réalisable. Même les courriels étiquetés, comme ceux pris en charge par GMail, sont généralement rejetés comme non valides, alors qu'ils sont parfaitement valides. ( davidcel.is/blog/2012/09/06/ le souligne bien). programmateurs.stackexchange.com/questions/78353/ explore les différentes options, mais la seule garantie à 100% est d'envoyer un courriel à l'adresse et de vérifier s'il y a des rebonds.

0voto

RichieMN Points 92

J'ai utilisé ce modèle d'expressions rationnelles qui permet de prendre en compte certaines des nouvelles extensions plus longues (.mynewsite, etc.).

@"^[\w-_]+(\.[\w!#$%'*+\/=?\^`{|}]+)*@((([\-\w]+\.)+[a-zA-Z]{2,20})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$"

Non valide parmi d'autres aussi :

  • email@com
  • email-o'neil@mysite.com <-- n'aime pas la tique, oh bien.

Des exemples qui fonctionnent :

  • email@m.superlongextension

0 votes

Pour ceux qui mettent en œuvre des validations de format Regex. Cela peut avoir un impact sur les performances de votre application.

-6voto

Wmanuelcr Points 1

Je pense que vous devez ajouter un composant au code html. Html.ValidationMessageFor . Ce composant montre la validation.

Le code peut être (en utilisant le rasoir) :

@Html.TextBoxFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)

Essayez-le.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X