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?
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; }
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!
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" />
.
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
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.