Desenvolvimento - ASP. NET

ASP.NET - Validation Groups (controles de validação)

Nas versões 1.x do ASP.NET temos um grande problema quando o assunto são os controles de validação. Isso ocorre quando temos mais de um botão que submete o formulário ao servidor, ou melhor, temos "ilhas" de controles em um mesmo WebForm (ASPX), que são independentes um dos outros, onde cada um deles trata informações diferentes...

por Israel Aéce



Validation Groups


Nas versões 1.x do ASP.NET temos um grande problema quando o assunto são os controles de validação. Isso ocorre quando temos mais de um botão que submete o formulário ao servidor, ou melhor, temos "ilhas" de controles em um mesmo WebForm (ASPX), que são independentes um dos outros, onde cada um deles trata informações diferentes.

O problema é quando pressionamos qualquer um destes botões, todos os validadores são disparados, impossibilitando o usuário de continuar o processo, obrigando-o a preencher todo o formulário para prosseguir.

Isso foi pensado melhor e resolvido na versão 2.0 do ASP.NET e a Microsoft incluiu os chamados Validation Groups que é exatamente o tema deste artigo. Como podemos ver na Figura 1 logo abaixo, o problema que acontece na versão 1.x, todos os validators são disparados, mesmo os que supostamente não deveriam ocorrer.

Figura 1 - O problema dos validadores da versão 1.x.

Como podemos reparar, quando pressionamos qualquer um dos botões, o formulário como um todo é tratato, e todos os validadores onde a consistência falha, são disparados.

Agora os controles tem uma nova propriedade, chamada ValidationGroup que receberá uma string que identificará o "Grupo" a ser validado pelo botão que desejar, e assim, tratar independentemente "ilhas" de controles nos formulários. Abaixo veremos o código HTML que exemplifica o uso dos Validation Groups:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Nome 1:
<asp:TextBox
id="TextBox1"
runat="server">
</asp:TextBox>
<asp:RequiredFieldValidator
id="RequiredFieldValidator1"
runat="server"
ErrorMessage="Digite o Nome 1"
ControlToValidate="TextBox1"
SetFocusOnError="True"
ValidationGroup="Grupo1">Digite o Nome 1</asp:RequiredFieldValidator>
<asp:Button
id="Button1"
runat="server"
Text="Grupo 1"
ValidationGroup="Grupo1">
</asp:Button>
<HR>
Nome 2:
<asp:TextBox
id="Textbox2"
runat="server">
</asp:TextBox>
<asp:RequiredFieldValidator
id="Requiredfieldvalidator2"
runat="server"
ErrorMessage="Digite o Nome 2"
ControlToValidate="TextBox2"
SetFocusOnError="True"
ValidationGroup="Grupo2">Digite o Nome 2</asp:RequiredFieldValidator>
<asp:Button
id="Button2"
runat="server"
Text="Grupo 2"
ValidationGroup="Grupo2">
</asp:Button>

Código 1 - Definindo o ValidationGroup.


Podemos reparar que para "amarrar" os controles, inclusive os validadores à serem validados por um botão qualquer, definimos uma string que baseado nela, o botão apenas verificará a consistência dos validadores que também são do mesmo grupo.

Outra característica da versão 2.0 do ASP.NET, é a propriedade SetFocusOnError. Quando esta propriedade esta definida como True e a consistência desse validador falhar, o foco é direcionado automaticamente para o controle que está associado ao mesmo.

CONCLUSÃO: Os validadores são uma forma elegante de tratarmos formulários em aplicações ASP.NET evitando assim, códigos Javascript que seríamos obrigados a digitar para obter o mesmo resultado. Apesar disso, na versão 1.x tínhamos o problema que vimos acima, e que, nesta nova versão foi solucionado com a adição da propriedade ValidationGroup.
Israel Aéce

Israel Aéce - Especialista em tecnologias de desenvolvimento Microsoft, atua como desenvolvedor de aplicações para o mercado financeiro utilizando a plataforma .NET. Como instrutor Microsoft, leciona sobre o desenvolvimento de aplicações .NET. É palestrante em diversos eventos Microsoft no Brasil e autor de diversos artigos que podem ser lidos a partir de seu site http://www.israelaece.com/. Possui as seguintes credenciais: MVP (Connected System Developer), MCP, MCAD, MCTS (Web, Windows, Distributed, ASP.NET 3.5, ADO.NET 3.5, Windows Forms 3.5 e WCF), MCPD (Web, Windows, Enterprise, ASP.NET 3.5 e Windows 3.5) e MCT.