ASP NET - Validators

Validators são controles para validação de dados.

Nota : Os validadores são controles server-side quando perdem o foco disparam um evento para análise no servidor. Portanto não se esqueça de configurar AutoEventWireup="true" no @Page da página para que o evento atrelado ao Validator seja disparado quando o controle perde o foco.

Importante 1 : O objetivo do Validator é exibir uma mensagem em caso de Erro. Portanto, se o parâmetro Display=Static é reservado um espaço para a mensagem mesmo que na carga da página ela esteja em branco.
Se o parâmetro Display="Dynamic" for utilizado o espaço para a mensagem de erro não é reservado e em caso de erro a página será recarregada e um espaço extra será aberto e a mensagem de erro exibida nela.
Se houver erro, a mensagem de erro será exibida nesse espaço e se não houver erro esse espaço continuará em branco.

Importante 2 : Todo o validador tem a propriedade Dica ('ToolTip' ). Aconselho sempre preencher essa dica porque como o usuário irá 'advinhar' que no campo só admite números de 5 a 10 ?.

Importante 3 : O valor de Page.IsValid é setado pelos validators. Portanto, se o valor for true a página foi validada com sucesso em todos os validators presente nela.

Na propriedade 'ErrorMessage' definimos a mensagem a ser exibida em caso de erro.
Se já não fez isso em outro ponto, procure colocar na mensagem algo que auxilie o usuário a preencher o campo corretamente. Por exemplo, como o usuário vai saber que o CEP é feito por 8 caracteres numéricos sem o travessão ? Ele pode estar acostumado com o travessão.
Ou se você decidiu no seu programa colocar a exigência do ano com 4 digitos numéricos e o usuário não enxerga bem e só coloco 2 caracteres.

Comparação - Compare Validator

Este validador como o próprio nome diz é um validador que atua comparando o valor presente no campo com um valor numérico, caractere, etc.

1-A primeira coisa a definir é qual o campo a validar ?
Na propriedade 'ControlToValidade' você precisa definir o id do controle a ser validado.

2-A segunda coisa a ser definida é contra o que ele vai ser validado?.

2.1-Esta comparação pode ser feita contra outro campo do formulário, pode exemplo, se tem um valor maior ou menor. Na propriedade 'Control to Compare' você define o campo cujo valor deverá ser comparado.

2.2-A comparação pode ser feita também com um valor fixo. O parâmetro 'ValueToCompare' determina o valor que deverá ser comparado com o campo

3-A terceira coisa a ser definida é que tipo de comparação queremos.
Ela pode ser feita comparando String, Currency(Moeda), Date(Data), Double (grandezas astronomicas) ou Integer(Números Inteiros). Esta opção é definida pela propriedade Type do Validator.

4-A quarta definição do que precisamos fazer é o tipo da comparação.
Na propriedade 'Operator' podemos definir qual a comparação que desejamos fazer.
Ela pode ser Igual(Equal), Diferente (NotEqual), Menor ou igual (LessThanEqual), Maior ou igual(GreaterThanEqual), Maior(GreaterThan), Menor(LessThan) ou se o dado digitado possui o valor como data válida ( DataTypeCheck ).

5-A quinta coisa que temos que definir é qual a mensagem deverá informar em caso de erro.
Na propriedade 'ErrorMessage' definimos a mensagem a ser exibida em caso de erro.

Exemplo de código:
    <form id="form1" runat="server">
        <h2>Compare Validator Equal Teste</h2>
        <p><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></p>

        <p>
            <asp:CompareValidator
                ID="CompareValidator1"
                runat="server"
                ControlToValidate="TextBox1"
                ErrorMessage="Mensagem de erro do Compare Validator."
                ForeColor="Red"
                ToolTip="Dica do Compare Validator"
                ValueToCompare="Teste">
            </asp:CompareValidator>
        </p>
        <p>Só deve aceitar o String Teste</p>
    </form>

Em caso de erro a tela exibida será:

Em caso de sucesso a mensagem em vermelho será trocada por nada, texto em branco.

Note que o CompareValidator apenas escreveu uma mensagem, ou seja, não tomou nenhuma atitude com o resultado obtido. Portanto, no submit do form é necessário verificar se a(s) mensagem(ns) dos validator está(ao) em branco para prosseguir. Isso pode ser feito pela propriedade Text do Validator.

Veja como funciona o Compare Validator acima Clicando aqui




Personalizado - Custom Validator

Custom validator é um meio termo entre ASP NET e o JavaScript. Os validators foram criados para retirar a necessidade de validação dos dados em JavaScript mas como há muitos tipos de validação e muitas delas precisam ser personalizadas a Microsoft resolveu deixar o velho método disponível em sua plataforma ASP NET

Portanto o Custom Validator nada mais é que um validador que se baseia no retorno true ou false de uma função JavaScript chamada pelo próprio validador. Se vocês se lembram na tag form a gente costumava colocar na cláusula onsubmit="return fncJavaScript()" justamente com essa finalidade, true prossegue o submit e false não.

1-A primeira coisa a definir é qual o campo a validar ?
Na propriedade 'ControlToValidade' você precisa definir o id do controle a ser validado.

2-A segunda coisa a ser definida é a função JavaScript que será utilizada para fazer a validação No campo ClientValidationFunction defina o nome da função JavaScript de validação
Sem () se não houver parâmetros a passar para a função.
Na definição da função a sintaxe padrão é a seguinte : function validacao(src, args){} e o retorno deverá ser no formato args.IsValid = true; ou args.IsValid = false;.
Em args.Value virá o valor do campo a que você definiu no ControlToValidate.É nele que será feita a validação.

3-A terceira coisa a ser definida é que tipo de comparação queremos.
Ela pode ser feita comparando String, Currency(Moeda), Date(Data), Double (grandezas astronomicas) ou Integer(Números Inteiros). Esta opção é definida pela propriedade Type do Validator.

4-A quarta coisa que temos que definir é qual a mensagem deverá informar em caso de erro.
Na propriedade 'ErrorMessage' definimos a mensagem a ser exibida em caso de erro.

Exemplo de código:
function validacao(src, args) {
    if(args.Value != 5){
   args.IsValid = false;
    }
    else {
   args.IsValid = true;
    }
}
</script>


    <form id="form1" runat="server">
        <h2>Custom Validator</h2>
        <p><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></p>

        <asp:CustomValidator
            ID="CustomValidator1"
            runat="server"
            ErrorMessage="Mensagem de Erro do CustomValidator"
            ControlToValidate="TextBox1"
            ClientValidationFunction="validacao"
            ToolTip="Neste campo digite o valor 5"
            ForeColor="Red">

        </asp:CustomValidator>

    </form>

Veja como funciona o Custom Validator acima Clicando aqui




Faixa de valores - Range Validator

Range Validator é uma verificação se o valor do campo está dentro de uma faixa de valores.

1-A primeira coisa a definir é qual o campo a validar ?
Na propriedade 'ControlToValidade' você precisa definir o id do controle a ser validado.

2-A segunda coisa a ser definida é contra o que ele vai ser validado?.

2.1-A propriedade 'Minimum Value' é o menor valor que deverá ser aceito pelo campo.

2.2-A propriedade 'Miximum Value' é o maior valor que deverá ser aceito pelo campo.

3-A terceira coisa a ser definida é que tipo de comparação queremos.
Ela pode ser feita comparando String, Currency(Moeda), Date(Data), Double (grandezas astronomicas) ou Integer(Números Inteiros). Esta opção é definida pela propriedade Type do Validator.

4-A quarta coisa que temos que definir é qual a mensagem deverá informar em caso de erro.
Na propriedade 'ErrorMessage' definimos a mensagem a ser exibida em caso de erro.

Nota : Ocasionará erro de compilação de o MaximumValue for menor que o MinimumValue

Exemplo de código:
    <form id="form1" runat="server">
        <h2>Range Validator</h2>
        <p><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></p>

        <asp:RangeValidator
            ID="RangeValidator1"
            runat="server"
            ErrorMessage="Fora da Faixa"
            ControlToValidate="TextBox1"
            MinimumValue="10"
            MaximumValue="20"
            ForeColor="Red"
            Type="Integer">
        </asp:RangeValidator>

        <p>Só deve aceitar números de 10 a 20 inclusive</p>
    </form>

Teste prático de funcionamento : Clique aqui




Expressão Regular - Regular Expression Validator

As expressões regulares ganharam terreno na validação de campos devido a velocidade e capacidade de verificar tipos complexos de dados.

Infelizmente Expressões Regulares não são fáceis de serem entendidas porque usam uma codificação própria com significado particular que define o funcionamento da verificação.

Se você desejar rever os conceitos de Expressões Regulares veja uma página de resumo clicando aqui

Infelizmente nem todas as implementações do tratamento de Expressões regulares seguem as mesmas regras mas a grande maioria, para a maioria das funcionalidades, funcionam igualmente.

1-A primeira coisa a definir é qual o campo a validar ?
Na propriedade 'ControlToValidade' você precisa definir o id do controle a ser validado.

2-A segunda coisa a ser definida é a expressão regular de validação do campo.
No campo ValidationExpression deverá ser colocada a expressão regular.

3-A terceira coisa que temos que definir é qual a mensagem deverá informar em caso de erro.
Na propriedade 'ErrorMessage' definimos a mensagem a ser exibida em caso de erro.

Exemplo de código:
    <form id="form1" runat="server">
        <h2>Teste de Regular Expression Validator</h2>
        <p><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></p>

        <asp:RegularExpressionValidator
            ID="RegularExpressionValidator1"
            runat="server"
            ErrorMessage="Erro no RegularExpressionValidator-Digite o CEP com 8 caracteres numéricos"
            ControlToValidate="TextBox1"
            ValidationExpression="\d{8}"
            ForeColor="Red">
        </asp:RegularExpressionValidator>

    </form>
    <p>Clique no campo, digite 8 digitos numéricos - Deve passar na validação</p>
    <p>Clique no campo, digite qualquer coisa diferente de 8 dígitos numéricos - NÃO deve passar na validação</p>
     

Teste prático de funcionamento : Clique aqui




Preenchimento obrigatório - RequiredField Validator

Este validator verifica se o usuário deixou o campo em branco ou não.

1-A primeira coisa a definir é qual o campo a validar ?
Na propriedade 'ControlToValidade' você precisa definir o id do controle a ser validado.

2-A segunda coisa a ser definida é o valor inicial do campo (InitialValue).
O campo pode vir com um valor (Text="Valor") e não pode retornar com esse mesmo valor.

3-A terceira coisa a ser definida é que tipo de comparação queremos.
Ela pode ser feita comparando String, Currency(Moeda), Date(Data), Double (grandezas astronomicas) ou Integer(Números Inteiros). Esta opção é definida pela propriedade Type do Validator.

4-A quarta coisa que temos que definir é qual a mensagem deverá informar em caso de erro.
Na propriedade 'ErrorMessage' definimos a mensagem a ser exibida em caso de erro.

Nota : Ocasionará erro de compilação de o MaximumValue for menor que o MinimumValue

Exemplo de código do RequiredFileValidator:
    <form id="form1" runat="server">
        <h2>RequiredField Validator</h2>
        <p><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></p>

        <asp:RequiredFieldValidator
            ID="RequiredFieldValidator1"
            runat="server"
            ErrorMessage="Não passou na Validação"
            ForeColor="Red"
            ControlToValidate="TextBox1"
            ToolTip="Não esquecer de preencher"
            Display="Dynamic">

        </asp:RequiredFieldValidator>

        <p>Clique no campo, digite algo e clique no form - Deve passar na validação</p>
        <p>Clique no campo, deixe ele em branco - NÃO deve passar na validação</p>
        <p>
            Nota : Ao carregar a página, clicar no campo e clicar fora do campo ou passar direto pelo
            campo sem digitar nada não é exibida a mensagem de erro mas a validação pode ser feita
            pelo valor de Page.IsValid.
        </p>

Teste prático de funcionamento : Clique aqui




Mensagens - Validation Summary

O próprio nome define o que este controle faz...uma súmula das validações.
Ao invés de todas as validações exibirem suas informações isoladamente e dispersas na página o Validation Summary reune todas as mensagens num único lugar e a exibição conjunta das críticas de validação ficam muito melhores.

A diferença básica é que não devemos definir o parâmetro AutoEventWireup="false" porque a validação se dará no clique de um botão ou numa etapa do processo mas não em cada um dos controles separadamente.

Exemplo de código do Validation Summary :
    <form id="form1" runat="server">
 
       <table cellpadding="10">
          <tr>
             <td>
                <table style="background-color:#eeeeee; padding:10px">
 
                   <tr>
                      <td colspan="3">
                         <b>Informações do Cartão de Crédito</b>
                      </td>
                   </tr>
                   <tr>
                      <td align="right">
                         Tipo do Cartão:
                      </td>
                      <td>
                         <asp:RadioButtonList id="RadioButtonList1" RepeatLayout="Flow" runat="server">
                            <asp:ListItem>MasterCard</asp:ListItem>
                            <asp:ListItem>Visa</asp:ListItem>
                         </asp:RadioButtonList>
                      </td>
                      <td align="center" rowspan="1">
                         <asp:RequiredFieldValidator
                              id="RequiredFieldValidator1"
                              ControlToValidate="RadioButtonList1"
                              ErrorMessage="Tipo do Cartão. "
                              Display="Static"
                              InitialValue=""
                             Width="100%"
                             runat="server">
                            *
                         </asp:RequiredFieldValidator>
                      </td>
                   </tr>
                   <tr>
                      <td align="right">
                         Número do Cartão:
                      </td>
                      <td>
                         <asp:TextBox id="TextBox1" runat="server" />
                      </td>
                      <td>
                         <asp:RequiredFieldValidator
                              id="RequiredFieldValidator2"
                              ControlToValidate="TextBox1"
                              ErrorMessage="Número do Cartão. "
                              Display="Static"
                              Width="100%"
                             runat="server">
                            *
                         </asp:RequiredFieldValidator>
                      </td>
                   </tr>
 
                   <tr>
                      <td></td>
                      <td>
                         <asp:Button id="Button1" text="Validar" runat="server" />
                      </td>
                      <td></td>
                   </tr>
                </table>
             </td>
             <td valign="top">
                <table cellpadding="20">
                   <tr>
                      <td>
                         <asp:ValidationSummary
                              id="valSum"
                              DisplayMode="BulletList"
                              runat="server"
                              HeaderText="Você deve digitar o valor dos seguintes campos:"
                              Font-Names="verdana"
                              Font-Size="12"/>
                      </td>
                   </tr>
                </table>
             </td>
          </tr>
       </table>
 
    </form>

Fonte : Microsoft Docs

Teste prático de funcionamento : Clique aqui

Validators Customizados

As vezes precisamos de validators com características que não se encaixam bem nos validator originais do ASP NET.

Validator numérico

Neste caso o campo deverá aceitar qualquer número inteiro, de 0 a N mas tem que ser numérico e só numeros dentro dele.

Clique aqui para ver esse exemplo funcionando.