ASP NET - Custom Validator

O custom validator é um validador customizado quando o Compare Validator, Range Validator, Required Field Validator e até Expressões Regulares não atendem exatamente o que você precisa para validar o campo.

No Custom Validator a validação é feita por uma função JavaScript Client side.

Teste do Custom Validator


Clique no campo texto acima e digite algo ou não

A validação é feita por um javascript que só aceitará o valor 5

A validação do CustomValidator é feita por uma função JavaScript chamada quando o elemento perde o foco.

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

    <form id="form1" runat="server">
        <h2>Teste do 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>

Note que como a validação é feita em JavaScript não é possivel diferenciar o número 5 do caractere 5 e neste validador não tem o Type que definiria o tipo da validação.

Importante 1 :Não se esqueça de configurar AutoEventWireup="true" no @Page da página. Isto é que dispara o evento quando o controle perde o foco.

Importante 2 : O validator apenas coloca ou não a mensagem de erro mas não toma nenhuma atitude.

A propriedade Text do validator tem a mensagem de erro ou não e podemos utilizar para tomar decisões como o submit da página mas o mais comum é o parametro Page.IsValid no submit da página mas isto ocorre quando a página já foi enviada ao servidor.

Basicamente nesse controle definimos alguns parâmetros :
   •ControlToValidate : Id do Controle a ser validado.
   •ErrorMessage : A mensagem a ser exibida em caso de erro.
   •ForeColor : Red : A cor da mensagem em vermelho.
   •ToolTip : Dica que neste caso é a mensagem 'Dica do Compare Validator'.
   •O campo ValueToCompare não existe neste controle.    •ClientValidationFunction : É o nome da função JavaScript que valida o valor.

O parâmetro Type Não existe neste controle.

O parâmetro Operator Não existe neste controle.

Outro parâmetro importante é o EnableClientScript que possibilita criar uma rotina javascript para tratar a validação do lado do cliente antes de submeter a validação do lado do servidor.

Outro fato importante a citar sobre o CompareValidator é que ele não é um controle ASPNET mas sim AJAX e com isto funciona em páginas asp, aspx, html, etc.

Botão Submit

No caso de termos que trabalhar com a validação em conjunto com o botão de submit faríamos o seguinte :

<asp:Button ID="btnEnviar" runat="server" Text="Enviar" OnClick="btnEnviar_Click" />

    Protected Sub btnEnviar_Click(sender As Object, e As EventArgs)
        Page.Validate()

        If Page.IsValid Then
            lblMsg.Text = "Texto validado...seguindo com submit dos dados"
        End If

Se o validador aprovar o parâmetro Page.IsValid será true. Caso contrário será falso e o processo nada fará mas o validador automaticamente colocará a mensagem de erro de validação na tela.

Note que igualmente aos outros controles é quando o campo texto perde o foco que o evento de validação é disparado.

No campo args.Value dos dados recebidos pela função JavaScript está o valor do campo digitado.

args.IsValid = true/false; define se a função deve retornar que o dado é válido(true) ou falso(false).