Validação no ASP
Pessoal, vou dar uma rápida passada em cada controle de validação do ASP.NET, apenas para compreendermos em qual situação é necessário usa-los, e quais usar... right?
Bem, com um formulário em mão e seus campos definidos, devemos localizar os controles na paleta Validation da ToolBox:
Logo de cara vou explicar o último, o ValidationSummary. Arrastando-o para seu formulário, não é preciso configurar nada, ele simplesmente exibirá um resumão, digo, sumário, dos erros de validações encontrados pelos outros componentes. Para uma maior customização você pode definir o grupo de validação dele pela propriedade ValidationGroup. Vejamos sua definição no formulário:
<asp:ValidationSummary ID="ValidationSummary1" runat="server" />
O RequiredFieldValidator, define que um campo é obrigatório. Ao arrastarmos para frente do controle a ser validado, de preferência, podemos definir as seguintes propriedades:
<asp:RequiredFieldValidator
ID="RequiredFieldValidator1"
runat="server"
ControlToValidate="TxtCampoObrigatorio"
ErrorMessage="Campo obrigatório!"
ToolTip="Este campo é obrigatório. Informe com algum valor!"
SetFocusOnError="True"
Text="*"
/>
A Propriedade ControlToValidate identifica o controle a ser validado.
A ErrorMessage é o texto que aparecerá no ValidationSummary.
ToolTip define o texto que aparecerá ao posicionarmos o mouse sobre o erro.
SetFocusOnError é um boleano que define se o campo receberá ou não foco ao ocorrer erro na validação.
Text é o texto que aparecerá no próprio controle de validação, caso o erro ocorra.
O RangeValidator é muito usado para validar intervalo de valores, por exemplo, a nota de um aluno que só pode ser entre 0 e 100! Vejamos sua definição e propriedades:
<asp:RangeValidator
ID="RangeValidator1"
runat="server"
ControlToValidate="TxtAlcance"
ErrorMessage="Intervalo de valor inválido!"
MaximumValue="100" MinimumValue="0"
ToolTip="Intervalo de valor inválido. Informe um valor entre 0 e 100!"
SetFocusOnError="True"
Type="Integer"
Text="*"
/>
Notamos o MaximumValue (Valor Máximo) e o MínimumValue (Valor Mínimo) configurado na mesma linha, assim fechamos o escopo de valores. Notamos também o Type como Integer, assim sendo, o campo só aceitará valores inteiros nesta faixa.
O RegularExpressionValidator é exclusivamente desenhado para expressões regulares. Nele definimos principalmente a propriedade ValidationExpression com a expressão regular desejada, veja na figura alguns "Templates" que acompanha o VS.
O CompareValidator é usado para comparar valores em dois controles, com aquelas confirmações de senha ou e-mail, ou entre tipos, como por exemplo quando há a necessidade de que o campo de texto receba uma data válida. Para comparar dois controles, além da propriedade ControlToValidate, devemos configurar o outro controle na propriedade ControlToCompare. Para validar se o tipo do dado do campo está nos conformes devemos configurar duas propriedades: A Operator (operação da validação) para DataTypeCheck (Checagem de Tipo de Dado) e a Type com o tipo desejado. Veja o exemplo para a validação de uma data:
<asp:CompareValidator
ID="CompareValidator1"
runat="server"
ControlToValidate="TxtComparacao"
ErrorMessage="Data inválida!"
Operator="DataTypeCheck"
ToolTip="Data inválida! Informe uma data válida!"
Type="Date"
SetFocusOnError="True"
Text="*"
/>
Por último o CustomValidator funciona com alguma rotina específica de validação. Esta rotina pode ser escrita em JavaScript por exemplo, vejamos o exemplo de validação de um número inteiro com BLOCKED SCRIPT
<asp:CustomValidator
ID="CustomValidator1" runat="server"
ControlToValidate="TxtCustomizado"
ErrorMessage="Valor inválido!"
ToolTip="Valor inválido. Informe um número inteiro!"
ClientValidationFunction="ValidarNumeroInteiro"
SetFocusOnError="True"
Text="*"
/>
Definimos a rotina JavaScript na propriedade ClientValidationFunction. Esta função tem que estar vinculada de alguma forma ao formulário. Veja como eu escrevi a função:
<head runat="server">
<title>
Título da Página
</title>
<script>
function ValidarNumeroInteiro(src, args)
{
args.IsValid = !isNaN(parseInt(args.Value, 10));
}
</script>
</head>
Note a assinatura da função... seus parametros. Isso é padrão, pois no CustomValidator não podemos definir a assinatura deste método de validação. Estes parametros são gerados pelo ASP.NET. O scr é o objeto originador da validação. Já o args, são os argumentos da validação, com a propriedade Value, que contém o valor do campo que está sendo validado, e a propriedade boleana IsValue, que define se o campo é válido ou não.
Lembrando que este tipo de validação foi só um exemplo que me veio a cabeça no momento, mas a validação de um número inteiro poderia ter sido feita facilmente com o CompareValidator... lembram?
Note que validamos um formulário sem nenhuma operação no codebehind do mesmo. Muito interessante, porém cuidado, a validação é feita no navegador do cliente atravéz de scripts (geralmente JavaScript) do controle de validação. Logo, para qualquer problema no navegador ou se o usuário desabilitar a execução de scripts, sua aplicação tem de ser sucetível no lado do servidor também!!! Então é altamente recomendável fazer validações e re-verificações no code behind também!
Código final do exemplo:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="EstudoASP._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>
Título da Página
</title>
<script>
function ValidarNumeroInteiro(src, args)
{
args.IsValid = !isNaN(parseInt(args.Value, 10));
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label6" runat="server" Text="Validações com ASP.NET"
Font-Names="Arial" Font-Size="Large" Font-Bold="True" ForeColor="#0066CC"></asp:Label>
<br />
<asp:Label ID="Label7" runat="server" Text="Este arquivo é um exemplo de validação no navegador do cliente. Não há interação com o servidor, todas as validações estão rodando sobre JavaScript no navegador! Preste atenção nas configurações do HTML e nos padrões dos nomes dos campos de Texto e Botões."
Font-Names="Arial" Font-Size="X-Small" Font-Bold="False"
ForeColor="#0066CC"></asp:Label>
<br />
<br />
<asp:Label ID="Label1" runat="server" Text="RequiredFieldValidator"
Font-Names="Arial" Font-Size="Small"></asp:Label>
<br />
<asp:TextBox ID="TxtCampoObrigatorio" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator1"
runat="server"
ControlToValidate="TxtCampoObrigatorio"
ErrorMessage="Campo obrigatório!"
ToolTip="Este campo é obrigatório. Informe com algum valor!"
SetFocusOnError="True"
Text="*"/>
<br />
<br />
<asp:Label ID="Label2" runat="server" Text="RangeValidator" Font-Names="Arial"
Font-Size="Small"></asp:Label>
<br />
<asp:TextBox ID="TxtAlcance" runat="server"></asp:TextBox>
<asp:RangeValidator
ID="RangeValidator1"
runat="server"
ControlToValidate="TxtAlcance"
ErrorMessage="Intervalo de valor inválido!"
MaximumValue="100" MinimumValue="0"
ToolTip="Intervalo de valor inválido. Informe um valor entre 0 e 100!"
SetFocusOnError="True"
Type="Integer"
Text="*"
/>
<br />
<br />
<asp:Label ID="Label3" runat="server" Text="RegularExpressionValidator"
Font-Names="Arial" Font-Size="Small"></asp:Label>
<br />
<asp:TextBox ID="TxtExpressaoRegular" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
ControlToValidate="TxtExpressaoRegular" ErrorMessage="e-mail inválido!"
ToolTip="Este e-mail está inválido. Informe um e-mail correto!"
ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
SetFocusOnError="True">*</asp:RegularExpressionValidator>
<br />
<br />
<asp:Label ID="Label4" runat="server" Text="CompareValidator"
Font-Names="Arial" Font-Size="Small"></asp:Label>
<br />
<asp:TextBox ID="TxtComparacao" runat="server"></asp:TextBox>
<asp:CompareValidator
ID="CompareValidator1"
runat="server"
ControlToValidate="TxtComparacao"
ErrorMessage="Data inválida!"
Operator="DataTypeCheck"
ToolTip="Data inválida! Informe uma data válida!"
Type="Date"
SetFocusOnError="True"
Text="*"
/>
<br />
<br />
<asp:Label ID="Label5" runat="server" Text="CustomValidator" Font-Names="Arial"
Font-Size="Small"></asp:Label>
<br />
<asp:TextBox ID="TxtCustomizado" runat="server"></asp:TextBox>
<asp:CustomValidator
ID="CustomValidator1" runat="server"
ControlToValidate="TxtCustomizado"
ErrorMessage="Valor inválido!"
ToolTip="Valor inválido. Informe um número inteiro!"
ClientValidationFunction="ValidarNumeroInteiro"
SetFocusOnError="True"
Text="*"
/>
<br />
<br />
<asp:ValidationSummary ID="ValidationSummary1" runat="server" />
<br />
<asp:Button ID="BntValidar" runat="server" Text="Validar" />
<br />
<br />
<asp:HyperLink ID="LnkMainsInfo" runat="server"
NavigateUrl="http://www.macoratti.net/aspnctl2.htm" Target="_blank">Mais
Info.</asp:HyperLink>
</div>
</form>
</body>
</html>
Resultado no browser:
Lembrando: Validação é assunto de certificação!!!
Gostaram!?
Abraços :)