Eduardo Spaki

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:

image

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.

image
image

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:

image 

Lembrando: Validação é assunto de certificação!!!

Gostaram!?

Abraços :)

Comentários

Sem comentários