Categorias

Validação de data utilizando o Custom Validator

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!

Adicione o código abaixo no seu webform:









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