web-dev-qa-db-fra.com

Validation du modèle de messagerie 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 de rasoir pour le contrôle de messagerie:

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

Alors, quelqu'un connaît une réponse?

TIA

51
lifeofbenschi

L'attribut DataType est utilisé à des fins de formatage et non de validation.

Je vous suggère d'utiliser ASP.NET MVC 3 Futures pour la validation du courrier électronique.

Exemple de code:

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

Si vous utilisez .NET Framework 4.5, il y a maintenant un construit dans EmailAddressAttribute qui habite System.ComponentModel.DataAnnotations.EmailAddressAttribute .

113
Leniel Maccaferri

Le projet DataAnnotationsExtensions a un attribut Email que vous pouvez utiliser.

8
jrummell

J'ai regardé le code source (reverse engineering par Reflector) et les variantes de DataType ne sont même pas implémentées! (C'était pour DateType.Date)

Donc, ça ne va pas marcher.

Personnellement, j'utiliserais RegexValidation pour le courrier électronique.


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

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