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