Olá pessoal,
Recentemente passei por um problema e gostaria de compartilhar a solução neste artigo.
Irei utilizar um projeto padrão do tipo MVC 4 – Internet Application do Visual Studio, este projeto já vem por padrão com o registro de usuários e controle do login com FormsAuthentication implementado.
Neste projeto temos uma área de registro de novos usuários e irei customizar para que o nome de usuário seja um e-mail, para isso é necessário que haja a validação no momento da criação do novo usuário.
Aqui está a Model AccountModels.cs original:
using System.ComponentModel.DataAnnotations; public class RegisterModel { [Required] [Display(Name = "User name")] public string UserName { get; set; } [Required] [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] [DataType(DataType.Password)] [Display(Name = "Password")] public string Password { get; set; } [DataType(DataType.Password)] [Display(Name = "Confirm password")] [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] public string ConfirmPassword { get; set; } }
Para que haja a validação é necessário decorar a propriedade do campo usuário (UserName), caso você pesquise na internet irá encontrar várias referências orientando a fazer a validação desta forma:
[Required] [Display(Name = "User name")] [DataType(DataType.EmailAddress, ErrorMessage = "E-mail em formato inválido.")] public string UserName { get; set; }
No momento do registro não irá funcionar a validação do formato de e-mail, ou seja, um usuário com nome “Teste” será registrado sem ser barrado pela validação.
Explicação:
Aparentemente seria essa a proposta do atributo DataType, mas não, o atributo DataType é usado apenas para formatação e não validação.
No .Net Framework 4.5 há um novo atributo System.ComponentModel.DataAnnotations.EmailAddressAttribute, que é um tipo de atributo utilizado justamente para validação, sua aplicação inclusive é mais fácil:
[Required] [Display(Name = "User name")] [EmailAddress(ErrorMessage = "E-mail em formato inválido.")] public string UserName { get; set; }
Utilizei o parâmetro ErrorMessage para definir a frase de erro a ser exibida, em outros casos basta usar o parâmetro [EmailAddress] que a validação será feita:
Lembrando que ainda existe a possibilidade de fazer a validação utilizando expressões regulares:
[Required] [Display(Name = "User name")] [RegularExpression(@"b[A-Z0-9._%-]+@[A-Z0-9.-]+.[A-Z]{2,4}b", ErrorMessage = "E-mail em formato inválido.")] public string UserName { get; set; }
É isso pessoal, uma dica simples mas que pode salvar algum tempo do seu trabalho 🙂
Até a próxima.