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.
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.
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).