Desenvolvimento - ASP. NET
Validação de datas usando CustomValidator
Neste artigo, explicarei uma das zilhões de formas de se validar uma data utilizando o CustomValidator.
por Luiz FernandoGalera, primeiramente quero dizer que é um prazer escrever o meu primeiro artigo para o linha de código. 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 há 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 formas 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:
<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" />
2° 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@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