Galera, primeiramente quero dizer que é um prazer escrever o meu primeiro artigo para o código fonte. Muitas pessoas que programavam em asp, php e etc…, estão acostumados a desenvolver rotinas de validação via javascript ou até mesmo programando funções e procedures.
Quando começam a aprender .NET como eu, estudam que á uma forma pronta para validação dos dados, porém acabam não usando, pois estão acostumados a programar a validação e não a chamar algo pronto e possa ser praticamente “configurável”.
Neste artigo, explicarei uma das zilhões de forma de se validar uma data utilizando o CustomValidator. Caso você precise entender mais sobre ASP.NET Validator, aconselho que procure outros artigos com o foco no assunto. Vamos lá então!
1º Adicione o código abaixo no seu webform:
2º Adicione o método que o Custom Validator irá chamar
////// Validar uma data /// /// /// public void ValidateDate(object source, ServerValidateEventArgs args) { DateTime dt; DateTime dtNascimentoMax = DateTime.Now.AddYears(-18); DateTime dtMax = DateTime.Parse("1/1/1973 12:00:00"); if (DateTime.TryParse(args.Value, out dt) == false) args.IsValid = false; //Valida se é maior de idade if (dt >= dtNascimentoMax) args.IsValid = false; //Valida a data para não dar SqlDateTime overflow if (dt <= dtMax) args.IsValid = false; }
Explicando o código passo a passo:
- Criado o textbox que será digitado a data.
- RequiredFieldValidator, foi adicionado para validar se foi digitado algo ou se o campo está vazio.
- É o validador que chama o método ValidateDate, que valida se a data digitada realmente é uma data
- Declarando o método sem retorno, com os parâmetros padrões, que seria o objeto que disparou o evento que seria o customvalidador e o argumento.
public void ValidateDate(object source, ServerValidateEventArgs args) {
- Irá manter a data digitada.
DateTime dt;
- Irá manter a data mínima para verificar se é maior ou menor de 18 anos
DateTime dtNascimentoMax = DateTime.Now.AddYears(-18);
- Irá manter a data mínima existente, pois caso você tente cadastrar uma data inferior a esta em um banco por exemplo Sql Server, será gerado uma Exceção.
SqlDateTime overflow. ... SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
DateTime dtMax = DateTime.Parse("1/1/1973 12:00:00");
- O método TryParse da classe DateTime, validada se aquela string é uma data. Se for uma data ele retorna true, caso contrário retorna false.
Funciona da seguinte maneira:
- O TryParse, recebe dois parâmetros, o primeiro é a string que será convertida em DateTime e verificado se é uma data ou não, e o segundo que é um parâmetro de saída do tipo DateTime, que será a data que o método retorna.
- Para finalizar a validação, eu fiz um if. Se o método retornar false, eu chamo a propriedade IsValid da classe ServerValidateEventArgs que irá receber false caso a data não seja válida.
if (DateTime.TryParse(args.Value, out dt) == false) args.IsValid = false; //Valida se é maior de idade if (dt >= dtNascimentoMax) args.IsValid = false; //Valida a data para não dar SqlDateTime overflow if (dt <= dtMax) args.IsValid = false; }
Bom gente então é isso, espero ter ajudado a comunidade com este artigo.
Qualquer dúvida, mande um e-mail para luizfcs00[at]gmail.com .
Abraços []`s !!!
TryParse: https://msdn2.microsoft.com/en-us/library/ch92fbc1.aspx
Referência: https://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.servervalidateeventargs.aspx