Atributo para validar E-mails utilizando Data Annotation em Asp.Net MVC 4 com C# (CSharp)
Postado em : 24/04/2016
Data Annotation Custumizado [EmailBrasil()]
Nesta postagem você vai aprender a validar um campo string
no formato e-mail email@dominio.com
ou email@dominio.com.br
usando Data Annotation
e jquery.validate
onde será feita a validação tanto do lado do cliente como no servidor.
Vamos criar aqui uma classe derivada da ValidationAttribute
e criar nossa classe customizada para a validação no servidor.
EmailBrasilAttribute
ErrorMessage Mensagem padrão de erro.
EmailRequeridoTrue
Se a digitação do e-mail é obrigatóriaFalse
se a digitação do e-mail não é obrigatória.
Crie uma classe na pasta Models
em seu projeto MVC com o nome de EmailBrasilAttribute.cs
copie e cole o código abaixo.
EmailBrasilAttribute.cs
/* * Atributo EmailBrasil * * Data Annotations para Validar uma hora no formato hh:mm. * * Visite nossa página http://www.codigoexpresso.com.br * * by Antonio Azevedo * * Chamada em sua Classe : * [EmailBrasil(ErrorMessage="Sua mensagem de erro", EmailRequerido=true/false)] * * EmailRequerido - (False) - Valida emails em branco * */ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Text.RegularExpressions; using System.Web.Mvc; public class EmailBrasilAttribute : ValidationAttribute, IClientValidatable { public Boolean EmailRequerido { get; set; } public EmailBrasilAttribute() { this.ErrorMessage = "E-mail inválido."; this.EmailRequerido = false; } protected override ValidationResult IsValid( object value, ValidationContext validationContext) { // Verifica se o Valor é nulo if (value == null) { value = ""; } // Retira espaços do final da literal value = value.ToString().TrimEnd(); // Caso o valor informado seja nulo não é requerido retorna sem validar if (value == "" && EmailRequerido == false) { return ValidationResult.Success; } // Atribui expressao Regex Regex regExpEmail = new Regex(@"^[a-zA-Z]+(([\'\,\.\- ][a-zA-Z ])?[a-zA-Z]*)*\s+<(\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3})>$|^(\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3})$"); // Valida a expressao Match match = regExpEmail.Match(value.ToString()); if (match.Success) { return ValidationResult.Success; ; } // Devolve o erro padrao se a expressao nao for valida. return new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName)); } // Diretivas para validação do lado do Cliente, implementa com jquery.validate public IEnumerable<ModelClientValidationRule> GetClientValidationRules( ModelMetadata metadata, ControllerContext context) { var Rule = new ModelClientValidationRule { ValidationType = "emailbrasil", ErrorMessage = this.FormatErrorMessage(metadata.PropertyName) }; Rule.ValidationParameters["emailrequerido"] = EmailRequerido; yield return Rule; } }
Agora vamos cuidar da validação do lado no cliente, ou seja, no navegado do cliente.
O MVC se encarrega de transportar os parametros para nosso HTML
mas mesmo assim temos que fazer toda a validação em JavaScript
novamente.
Crie uma arquivo JavaScript
na pasta Scripts
de seu projeto MVC, de o nome de CustomValidacoes.js
copie e cole o código abaixo.
CustomValidacoes.js
// Aqui adicionamos os metodos respeitando os nomes gerado em nossa classe atributo // os nomes devem estar em caixa baixa tanto na integração como aqui no JavaScript (Nome atributo, parametro) $.validator.unobtrusive.adapters.addSingleVal('emailbrasil', 'emailrequerido'); //Aqui temos a funcao que Valida do lado do cliente o e-mail digitado utilizando uma expressão regular $.validator.addMethod('emailbrasil', function (value, element, emailrequerido) { // Retira espaços do final da literal value = value.trim(); // Valida caso o valor não tenha sido preenchido if (value.length == 0) { if (emailrequerido.toString() == "True") { return false; } else { return true; } } // Atribui expressão var expReg = /^[a-zA-Z]+(([\'\,\.\- ][a-zA-Z ])?[a-zA-Z]*)*\s+<(\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3})>$|^(\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3})$/; // Valida Expressao var result = value.match(expReg); // Retorna false caso a expressao nao seja valida if (result != null) { return true; } return false; });
Este arquivo deve ser carregado após o carregamento do jquery.validate
.
Exemplo de como utilizar o atributo em sua classe.
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; using SeuProjeto.Models; namespace AspNetMVC_Aula.Models { public class ModAluno { [EmailBrasil(ErrorMessage = "E-mail inválido", EmailRequerido = false )] public string? Email { get; set; } } }
Links Relacionados
- Atributo para validar Datas utilizando Data Annotation em Asp.Net MVC 4 com C# (CSharp).
- Atributo para validar Horas utilizando Data Annotation em Asp.Net MVC 4 com C# (CSharp)
- Atributo para validar Números utilizando Data Annotation em Asp.Net MVC 4 com C# (CSharp)
- Atributo para validar Senhas utilizando Data Annotation em Asp.Net MVC 4 com C# (CSharp).
- Aula 04 - Validação com Data Annotation (Parte 01) em Asp.Net MVC 4 com C#(CSharp) Visual Studio 2013
- Aula 05 - Validação com Data Annotation (Parte 02) / Mascaras com JQuery-Mask em Asp.Net MVC 4 com C#(CSharp)
- Aula 06 - Validação com Data Annotation (Parte 03) / Números em Asp.Net MVC 4 com C#(CSharp)
- Aula 07 - Validação com Data Annotation (Parte 04) / Validação Remota (Attribute Remote) em Asp.Net MVC 4 com C#(CSharp)
- Aula 08 - Validação com Data Annotation (Parte 05) / Validação E-mail, Senha e Atributo Compare, Ignora Validações em Asp.Net MVC 4 com C#(CSharp)
- Data Annotation em C# (CSharp)
- Dígito verificador do CNPJ em C# (CSharp)
- Dígito verificador do CPF em C# (CSharp)
- Exemplo de Stored Procedure com tratamento de erros e transação. (SqlServer)
- Expressões Regulares [RegularExpression]
- Ignorar validações em Data Annotation em C# (CSharp)
- ModelBinder - Customizando o vinculo do Modelo com o HTML em Asp.Net MVC 4 com C# (CSharp)
- Protegendo seu site de ataques (CSRF ) com ValidateAntiForgeryToken Asp.Net MVC4 com C#(CSharp)
- Validar Modelos com Data Annotation e Windows Form Application C#(CSharp)
Comentários
Realizei teste baixando novamente o código em uma nova aplicação e esta rodando tudo perfeitamente, se possível envie seu código para contato@codigoexpresso.com.br e vou verificar o que pode estar acontecendo, obrigado.
Comigo não estava apresentando erro fiz uma modificação em 22/08/2016 e utilizei esta base mesmo em minhas Vídeo Aulas, vou fazer um teste mais depurado para ver se apresenta algum erro, dou o retorno mais tarde.
Boa tarde Antonio, gostaria antes de mais nada agradecer demais pelo conhecimento que estou adquirindo através das vídeos aulas, belíssimo trabalho! Gostaria também de tirar uma dúvida sobre o uso no EmailBrasil. Não estou conseguindo que emails .com.br sejam aceitos, somente .com. Já tentei mudar o regex, porém ainda continua o erro. Desde de já agradeço e parabenizo novamente pelo trabalho.
Atenciosamente, Marcus Louzada
Correção, retirada de espaços no final da literal antes de validar, comigo não havia apresentado o erro mas um usuário estava com problemas.