Validando dados de páginas WEB Para que validar os dados? Validar os dados informados pelo usuário garante que sua aplicação funcione corretamente e as informações contidas nela tenha algum sentido. Outro motivo para validar os dados, é a necessidade de se obter informações antes de inserir em um banco de dados. Os campos obrigatórios nem sempre são preenchidos pelos usuários, o que torna a rotina de inserção inconsistente e gerará um erro que não fica bem aos olhos do usuário. As formas de validar os dados são: aguardar que o usuário preencha todo o formulário e clique no botão enviar. Quando isto acontecer validarmos os dados e exibirmos uma mensagem ao usuário (e obviamente ele terá que digitar todos os dados novamente, o que vai deixa-lo insatisfeito com o sistema) ou podemos simplesmente validar os dados usando os controles de validação do ASP.Net e evitando este problema. Os controles de validação do ASP.Net O ASP.Net possui alguns controles de validação, até a versão do Visual Studio 2008 com.net framework 3.5, podemos citar: RequiredFieldValidator CompareValidator RangeValidator CustomValidator RegularExpressionValidator ValidationSummary Estes são os componentes de validação do ASP.Net, e com eles, podemos tratar o que o usuário está digitando sem esperar que ele envie o formulário. Vamos à um estudo de cada um: RequiredFieldValidator: Este componente força o usuário a preencher o componente associado à ele. Ou seja, se utilizarmos associado à um componente TextBox, faz com que para que o formulário seja enviado para o servidor, este TextBox precisa ser preenchido. CompareValidator: Este componente é usado para efetuar uma (comparação) entre dois valores, se por acaso você analisar se uma senha digitada é igual à outra, pode fazer isto por este controle, evitando que o usuário dê um enviar na página só para saber se as senhas estão corretas. RangeValidator: Quer validar se um valor digitado pelo usuário está entre valores específicos? Fácil, basta usar este item de validação. Basta definir o valor mínimo, o valor máximo e qual o tipo de dados a ser comparado (inteiro, string, double, date e currency). CustomValidator: Caso os componentes vistos até aqui não satisfaçam a necessidade do seu sistema, ainda há a possibilidade de que você possa programar a validação. Por exemplo, conferir se o código digitado já está ou não na base de dados. Efetuar cálculos complexos antes de validar um item etc.
RegularExpressionValidator: Existe ainda o validador por expressão regular. Uma expressão regular é uma string usada como parâmetro de comparação em um texto, de forma a localizar padrões e validar o texto digitado como válido ou inválido. Uma expressão regular, em suma, é uma fórmula para validar máscaras de entrada, como por exemplo, um telefone, RG, CPF etc. A forma como uma expressão regular é criada, ou mesmo seus padrões, fogem ao escopo da disciplina, mas para quem haver interesse em aprender mais sobre o assunto, o site o Aurélio Marinho Jargas (http://aurelio.net/regex/) possui bastante informação sobre elas. ValidationSummary: Este último não é exatamente um componente capaz de validar alguma informação, e sim um contêiner para listar em um único lugar todas as mensagens de erro. Assim sua página ficará organizada, e você pode exibir mensagens mais extensas sem se preocupar em afetar o layout do site. Usando os controles de validação do ASP.Net Iniciaremos um novo projeto de página web. Nele, iremos tratar campos TextBox com valores digitados utilizando os controles de validação existentes. Entre as tags <div> e o seguinte código: Required Field:<br /> <asp:textbox ID="txtRequerido" runat="server"></asp:textbox> <asp:button ID="btnEnviar1" runat="server" Text="Enviar" /> <asp:label ID="lblOk1" runat="server" Text=""></asp:Label> Range:<br /> <asp:textbox ID="txtRange" runat="server"></asp:textbox> <asp:button ID="btnEnviar2" runat="server" Text="Enviar" /> <asp:label ID="lblOk2" runat="server" Text=""></asp:Label> Compare:<br /> <asp:textbox ID="txtCompare1" runat="server"></asp:textbox> <asp:textbox ID="txtCompare2" runat="server"></asp:textbox> <asp:button ID="btnEnviar3" runat="server" Text="Enviar" /> <asp:label ID="lblOk3" runat="server" Text=""></asp:Label> Custom:<br /> <asp:textbox ID="txtCustom" runat="server"></asp:textbox> <asp:button ID="btnEnviar4" runat="server" Text="Enviar" />
<asp:label ID="lblOk4" runat="server" Text=""></asp:Label> Regular Expression:<br /> <asp:textbox ID="txtRegular" runat="server"></asp:textbox> <asp:button ID="btnEnviar5" runat="server" Text="Enviar" /> <asp:label ID="lblOk5" runat="server" Text=""></asp:Label> Validation Summary:<br /> Ao termino, sua tela irá exibir algo similar a esta tela (sem os objetos em vermelho): Vamos agora aos controles de validação (às regras de validação, por assim dizer): No primeiro TextBox, iremos adicionar um campo RequiredField, e associaremos à este TextBox. Para associar os dois controles, basta na tag <asp:requiredfieldvalidator adicionando o parâmetro ControlToValidate e o ID do controle que estará associado, lembrando que deve estar entre aspas. Vamos também, aproveitar e, na última tag div com formatação de borda, iremos colocar o componente validation summary. Nele nós não precisamos fazer alteração nenhuma. Apenas coloque um * (asterisco) na propriedade text do RequiredFieldValidator.
Vamos agora fazer o código do botão enviar. Só iremos prosseguir com a rotina se a página tiver dados corretos, mas como o botão (que não está associado ao TextBox ou ao RequiredField) irá saber se os dados estão corretos ou não? Quando uma página é validada, uma propriedade desta página é setada com True ou False. Esta propriedade indica se os dados enviados ao servidor passaram ou não pela validação e se a página está pronta para executar a tarefa feita pelo botão. Esta propriedade é o IsValid e só pode ser tratada como true, ou seja, apenas o bloco true é executado e nada além dele. A estrutura ficaria assim: Protected Sub btnenviar_click(byval sender As Object, ByVal e As EventArgs) Handles btnenviar1.click If IsValid Then lblok1.text = "O campo do TextBox foi preenchido!" End If End Sub Repare que o código é simples, porém resume exatamente como uma página verifica se seus dados foram validados ou não. Todo o código da lógica do botão, deve estar dentro da estrutura de verificação do IsValid. Veja agora na tabela, as propriedades a serem usadas em cada um dos controles de validação: RequiredFieldValidator RangeValidator MinimumValue [ mínimo do range] MaximumValue [ máximo do range] Type [Tipo de dados comparado] CompareValidator ControlToCompare [ID do controle comparado] ValueToCompare [ comparado (base)] Operator [Um operador de comparação] Type [Tipo de dados comparado] CustomValidator RegularExpressionValidator ValidationExpression [Expressão que analisa seguindo um padrão]
Estas são algumas das propriedades dos objetos de validação existem, dependendo da versão do.net Framework, alguns outros componentes. Mas a via de regra, sempre teremos duas características em comum em todos: o ErrorMessage e o ControlToValidate. Inserindo os controles de validação: Inclua, em cada tag <div> seu controle de validação correspondente, de forma que fique entre o primeiro e os quatro seguintes ( ), veja como ficaria o exemplo: <asp:requiredfieldvalidator ID="RFV1" runat="server" ErrorMessage="O campo do TextBox não pode estar em branco" ControlToValidate="txtRequerido">*</asp:RequiredFieldValidator> Assim, o controle irá se posicionar entre a caixa de texto e o botão. Como mostrado na imagem da tela da página. Fazendo isto para todos os controles teremos, na última <div>, que adicionar apenas após a tag <br /> um componente para listar todos os erros, para que a página fique mais organizada. Atentando apenas para o controle RegularExpressionValidator, que teremos que criar um padrão de análise para a string digitada. Não iremos abordar a fundo todo o conteúdo por trás do mundo das expressões regulares, mas segue aqui o padrão usado para validar a string de CPF, e um texto explicando como ela funciona: ^[0-9]{3}.[0-9]{3}.[0-9]{3}-[0-9]{2}$ Onde o ^ (circunflexo) indica que o padrão deve estar no inicio do texto, há uma lista (itens entre colchetes[] ) que podem conter números de 0 à 9, e que se repetem 3 vezes ({3}), depois obrigatoriamente deve existir um ponto. A mesma sequencia (números de 0 à 9, repetidos 3 vezes) formam os caracteres da segunda e terceira parte da string, separados por um ponto. Depois é obrigatória a existência de um traço e mais uma sequencia de 2 números de 0 à 9. Finalizando, o caracter cifrão ($) indica que a string DEVE terminar com o padrão.