2012-07-12 17 views
26

Estoy usando este código en un campo de correo electrónico:MVC [Tipo de datos (DataType.EmailAddress) ninguna validación

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

[DataType(DataType.EmailAddress)] no funciona (la validación no se produce ninguna en un servidor no en el lado del cliente) .

no estoy seguro de si debería aplicar a mí mismo un atributo personalizado o puedo usar uno incluido con MVC 3.

¿Me podría sugerir una solución para crear un atributo personalizado en caso de que lo necesite.

leí también acerca de algunas extensiones adicionales, ejemplo http://nuget.org/packages/DataAnnotationsExtensions.MVC3

sugeriría usted a mí?

+0

Tuve un problema similar y solo usé un 'RegularExpression (...)' para hacer la validación de la dirección de correo electrónico. – bluevector

+3

Por favor amplía 'No funciona'. El elemento de entrada en el DOM (si usa 'HTML.InputFor (m => m.Email)' debe tener el conjunto de atributos 'type =" email "'. –

+0

muéstrenos su vista –

Respuesta

9

En el momento en que han resuelto mi problema utilizando http://dataannotationsextensions.org

simplemente funciona, que suman su biblioteca con NuGet

using DataAnnotationsExtensions; 


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

No funciona si tomamos el modelo de datos en un proyecto de biblioteca de clase –

+1

A partir de hoy: '[EmailAddress]' – Lobato

41

Se puede usar la biblioteca DataAnnotations habitual sólo por el uso [EmailAddress]

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

También para referencia, esta es la versión de expresión regular de esta validación:

[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;} 

Best of luck!

+1

Lo siento pero su expresión regular no funciona. – escist

+2

Oye, escist, prueba este en su lugar: [RegularExpression (@ "^ [A-Za-z0-9] (([_ \. \ -]? [a-zA-Z0-9] +) *) @ ([A-Za-z0 -9] +) (([\. \ -]? [A-zA-Z0-9] +) *) \. ([A-Za-z] {2,}) $ ", ErrorMessage =" El correo electrónico es no válido ")] ' – SarahK

+4

Deja de validar las direcciones de correo electrónico con expresiones regulares ya http://davidcel.is/blog/2012/09/06/stop-validating-email-addresses-with-regex/ – Luc

4

Puede ser esto será útil para alguien. Después de que funciona para mí

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

Pero no funciona después de

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

estoy usando MVC 5 & .NET 4.5

+0

Parece que el atributo [DataType (DataType.EmailAddress] solo aparece para validar si El atributo [Required] también se especifica. Si solo quiere validar la entrada si existe, parece que el atributo [EmailAddress] es más adecuado – Neilski

5

Parece que todas las respuestas se centran en el modelo de datos, mientras que este problema puede verse afectada por la Vista misma.

El siguiente en MVC .NET 4.5 está funcionando bien:

modelo

datos:

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

Razor Ver:

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

Nota: no es necesario añadir [EmailAddress ] atributo. Si usa [DataType (DataType.EmailAddress)] junto con @ Html.EditorFor() en su Vista, debería estar bien.

Como se resaltó con rich.okelly, al final desea que su entrada se represente como <input type="email" />.

+1

intente ingresar el valor a @ a El formulario se envía y pasa la validación tanto en el cliente y servidor. Si usa EmailAddress en el modelo, pasa al lado del cliente y falla en el lado del servidor. – Bob

1

Como Felix mentioned, el problema está en el nivel View, es necesario utilizar EditorFor() en su View en lugar de TextBoxFor(), la EditorFor() rendirá:

<input type="email" /> 

que activará la validación, mientras que TextBoxFor() rendirá:

<input type="text" /> 

Para validar su dirección de correo electrónico ingresada, necesita (en combinación con EditorFor()) para utilizar solamente:

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

De esta manera, será siempre validado su valor introducido para el correo electrónico, pero si no se introduce un valor para el correo electrónico, no pasará nada (a menos que especifique el atributo [Required]), el formulario se enviará con una dirección de correo electrónico vacía.

Cuestiones relacionadas