Este artigo tem nota
10

Conheça o Autor

nandinh0
Luiz
Fernando Cerqueira Santos

membro deste fevereiro de 2008.

Palavras-Chave

Compartilhe e guarde
  • Rec6
  • StumbleUpon
  • ueba
  • linkk
  • dihitt
  • linkloko
  • websapiens
  • linkto
  • Technorati
  • Simpy
  • del.icio.us
  • Faves: Fave It!
ASP.NET

Validação de data utilizando o Custom Validator

domingo, 23 de março de 2008

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:
<asp:TextBox ID="txtDataNascimento" runat="server" MaxLength="10" />

<asp:RequiredFieldValidator ID="rfvtxtDataNascimento" runat="server" Text="*" ErrorMessage="O campo Data de Nascimento está vazio." Display="Dynamic" ControlToValidate="txtDataNascimento">
</asp:RequiredFieldValidator>

<asp:CustomValidator ID="ctvtxtDataNascimento" runat="server" ErrorMessage="Data inválida" ControlToValidate="txtDataNascimento"
Text="*" OnServerValidate="ValidateDate"></asp:CustomValidator>

<br />
<asp:Button ID="btnProximoView1" runat="server" Text="testar" />


Adicione o método que o Custom Validator irá chamar
    /// <summary>
/// Validar uma data
/// </summary>
/// <param name="source"></param>
/// <param name="args"></param>
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.
<asp:TextBox ID="txtDataNascimento" runat="server" MaxLength="10" />


- RequiredFieldValidator, foi adicionado para validar se foi digitado algo ou se o campo está vazio.
<asp:RequiredFieldValidator ID="rfvtxtDataNascimento" runat="server" Text="*" ErrorMessage="O campo Data de Nascimento está vazio." Display="Dynamic" ControlToValidate="txtDataNascimento">
</asp:RequiredFieldValidator>


- É o validador que chama o método ValidateDate, que valida se a data digitada realmente é uma data
<asp:CustomValidator ID="ctvtxtDataNascimento" runat="server" ErrorMessage="Data inválida" ControlToValidate="txtDataNascimento" 
Text="*" OnServerValidate="ValidateDate"></asp:CustomValidator>

<br />
<asp:Button ID="btnProximoView1" runat="server" Text="testar" />



- 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: http://msdn2.microsoft.com/en-us/library/ch92fbc1.aspx
Referência: http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.servervalidateeventargs.aspx
ArquivoTipoTamanho 
validar data.docArquivo DOC36,5 KbBaixar o Arquivo
Sim   Não   Este artigo foi útil para você?
NotaComentárioMembro
10
24/3/2008
show de bola!! ;-)
achei muito bacana esse artigo!!! ;-)
parabéns nandinh0000!!!!

francke
Regras:
Os comentários seguem as seguintes regras:
  • Todos os comentários são enviados por membros cadastrados no site.
  • Os comentários serão pré-aprovados, porém a equipe do site revisará o conteúdo de todos os comentários podendo ser invalidados (inclusive a pontuação).
  • Os comentários precisam ter, obrigatóriamente, coerência sobre o conteúdo que será comentado.
  • O membro que atingir 10 comentários invalidados não poderá mais comentar dentro do site. Com isso o membro não poderá mais ganhar pontos com comentários.

Comente

     (ainda não tem cadastro? clique aqui!)


Máximo de 30 caracteres

Máximo de 255 caracteres