web-dev-qa-db-fra.com

mvc [DataType (DataType.EmailAddress) aucune validation

J'utilise ce code sur un champ de messagerie:

    [Required]
    [DataType(DataType.EmailAddress)]
    [Display(Name = "Email address")]
    public string Email { get; set; }

[DataType(DataType.EmailAddress)] ne fonctionne pas (la validation n'a pas lieu non sur un serveur pas côté client).

Je ne sais pas si je dois m'implémenter un attribut personnalisé ou je peux utiliser celui inclus avec MVC 3.

Pourriez-vous s'il vous plaît me suggérer une solution pour créer un attribut personnalisé au cas où j'en aurais besoin.

J'ai également lu quelques extensions supplémentaires, par exemple http://nuget.org/packages/DataAnnotationsExtensions.MVC

Pourriez-vous me le suggérer?

29
GibboK

Pour le moment, j'ai résolu mon problème en utilisant DataAnnotationsExtensions

ça marche, vous ajoutez leur bibliothèque avec NuGet

using DataAnnotationsExtensions;


[Required]
    [DataType(DataType.EmailAddress)]
    [Email]
    public string Email { get; set; }
11
GibboK

Vous pouvez utiliser la bibliothèque DataAnnotations habituelle en utilisant simplement [EmailAddress]

using System.ComponentModel.DataAnnotations;
    [Required]
    [EmailAddress]
    public String Email { get; set; }

Aussi juste pour référence, voici la version d'expression régulière de cette validation:

    [RegularExpression(@"^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-‌​]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$", ErrorMessage = "Email is not valid")]
    public String Email {get; set;}

Bonne chance!

44
SarahK

Il semble que toutes les réponses se concentrent sur le modèle de données alors que ce problème peut être affecté par la vue elle-même.

Les éléments suivants sur MVC .NET 4.5 fonctionnent correctement:

Modèle de données:

[Required]
[DataType(DataType.EmailAddress)]
[DisplayName("Email")]
public string Email { get; set; }

Vue rasoir:

@Html.LabelFor(model => model.Email)
@Html.EditorFor(model => model.Email)

Remarque: n'a pas besoin d'ajouter l'attribut [EmailAddress]. Si vous utilisez [DataType (DataType.EmailAddress)] avec @ Html.EditorFor () dans votre affichage, cela devrait aller.

Comme souligné avec rich.okelly, à la fin, vous voulez que votre entrée soit rendue comme <input type="email" />.

6
Felix

Cela pourrait être utile à quelqu'un. Travaux suivants pour moi

[Required(ErrorMessage = "*")]
[DataType(DataType.EmailAddress)]
[EmailAddress]
public string Email { get; set; }

Mais ne fonctionne pas après

[Required(ErrorMessage = "*")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }

J'utilise MVC 5 & .NET 4.5

4
msib

Comme Felix mentionné , le problème est au niveau View, vous devez utiliser EditorFor() dans votre View au lieu de TextBoxFor(), la EditorFor() affichera:

<input type="email" />

qui déclenchera la validation, tandis que TextBoxFor() rendra:

<input type="text" />

Ainsi, afin de valider votre adresse e-mail saisie, vous devez (en combinaison avec EditorFor()) utiliser uniquement:

[DataType(DataType.EmailAddress)]
public string Email { get; set; }

De cette façon, votre valeur saisie pour le courrier électronique sera toujours validée, mais si vous ne saisissez pas de valeur pour le courrier électronique, rien ne se passera (sauf si vous avez spécifié l'attribut [Required]), Le formulaire sera soumis avec un champ vide adresse électronique.

2
Stacked