2012-01-24 19 views
40

Tengo siguiente modelo:correo electrónico de validación del modelo con DataAnnotations y DataType

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

Validación requerida funciona bien. Pero cuando intento con DataType, no reacciona.

Aquí está mi código de afeitar para el control de correo electrónico:

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

tanto, cualquier persona sabe la respuesta?

TIA

Respuesta

99

DataType atributo se utiliza para fines de formato, no para su validación.

Sugiero que utilice ASP.NET MVC 3 Futures para la validación de correo electrónico.

Código de ejemplo:

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

Si sucede utilizar .NET Framework 4.5, ahora hay una construida en EmailAddressAttribute que vive en System.ComponentModel.DataAnnotations.EmailAddressAttribute.

+2

pero acepta 'algo @ dominio'. Supongo que iré con expresión regular esta vez. –

+1

Como no podemos dar un mensaje de error personalizado. Estoy usando la siguiente manera en su lugar. [EmailValidation (ErrorMessage = "La dirección de correo electrónico ya existe")] [RegularExpression ("^ [a-z0-9 _ \\ + -] + (\\. [A-z0-9 _ \\ + -] +) * @ [a-z0-9 -] + (\\.[A-Z0-9] +) * \\. ([Az] {2,4}) $ "ErrorMessage = "formato de correo electrónico no válida.")] [Obligatorio (ErrorMessage =" Por favor, introduzca su dirección de correo electrónico . "), StringLength (50)] cadena pública de correo electrónico {get; set;} –

+1

Esa expresión regular fallará para "! ryan.o'[email protected]" – jksemple

2

He mirado el código fuente (ingeniería inversa por el reflector) y DataType variantes son en realidad ni siquiera implementado! (Esto fue para DateType.Date)

Así que no va a funcionar.

Usaría personalmente RegexValidation para el correo electrónico.


Para mayor claridad, aquí es la implementación de IsValid en clase DataTypeAttribute:

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

jejeje ... ¡todo es válido! =) –

+0

La validación de Regex de direcciones de correo electrónico es una muy mala idea; el RFC permite muchas permutaciones extrañas para hacer factible una expresión regular. Incluso los correos electrónicos etiquetados, como los admite GMail, generalmente se rechazan como no válidos, a pesar de ser perfectamente válidos. (http://davidcel.is/blog/2012/09/06/stop-validating-email-addresses-with-regex/ señala esto bien). http://programmers.stackexchange.com/questions/78353/how-far-should-one-take-e-mail-address-validation explora las diversas opciones, pero la única garantía del 100% es enviar por correo electrónico la dirección y buscar rebota. –

8

El proyecto DataAnnotationsExtensions tiene un Email attribute que puede usar.

+0

ya he utilizado éste bastante bueno también he intentado para recordar el nombre, pero no podía recordarlo. Terminó sugiriendo MVC 3 Futures. –

-6

Creo que debe agregar al código html un componente Html.ValidationMessageFor. Este componente muestra la validación.

El código puede ser (usando la maquinilla de afeitar):

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

intentarlo.

+0

Este código no realiza ninguna validación –

Cuestiones relacionadas