ASP NET - Summary Validator

O summary validator se destina a páginas que possuem diversos controles para serem validados e uma parte da página é reservada para exibir essas mensagens.

Informações do Cartão de Crédito
Tipo do Cartão:
Número do Cartão:

A validação aqui feita é complexa. Você deve ou não escolher um dos cartões (Mastercard ou Visa)

Você deverá digitar algo no campo 'Número do Cartão'

Clique no botão 'Validar' para realizar a validação dos campos

Exemplo de código:
        <form id="form1" runat="server">

            <table cellpadding="10">
                <tr>
                    <td>
                        <table style="background-color: #eeeeee; padding: 10px">

                            <tr>
                                <td colspan="3">
                                    <b>Informações do Cartão de Crédito</b>
                                </td>
                            </tr>
                            <tr>
                                <td align="right">Tipo do Cartão:
                                </td>
                                <td>
                                    <asp:RadioButtonList ID="RadioButtonList1" RepeatLayout="Flow" runat="server">
                                        <asp:ListItem>MasterCard</asp:ListItem>
                                        <asp:ListItem>Visa</asp:ListItem>
                                    </asp:RadioButtonList>
                                </td>
                                <td align="center" rowspan="1">
                                    <asp:RequiredFieldValidator
                                        ID="RequiredFieldValidator1"
                                        ControlToValidate="RadioButtonList1"
                                        ErrorMessage="Tipo do Cartão. "
                                        Display="Static"
                                        InitialValue=""
                                        Width="100%"
                                        runat="server">
                                    *
                                    </asp:RequiredFieldValidator>
                                </td>
                            </tr>
                            <tr>
                                <td align="right">Número do Cartão:
                                </td>
                                <td>
                                    <asp:TextBox ID="TextBox1" runat="server" />
                                </td>
                                <td>
                                    <asp:RequiredFieldValidator
                                        ID="RequiredFieldValidator2"
                                        ControlToValidate="TextBox1"
                                        ErrorMessage="Número do Cartão. "
                                        Display="Static"
                                        Width="100%"
                                        runat="server">
                                    *
                                    </asp:RequiredFieldValidator>
                                </td>
                            </tr>

                            <tr>
                                <td></td>
                                <td>
                                    <asp:Button ID="Button1" Text="Validar" runat="server" />
                                </td>
                                <td></td>
                            </tr>
                        </table>
                    </td>
                    <td valign="top">
                        <table cellpadding="20">
                            <tr>
                                <td>
                                    <asp:ValidationSummary
                                        ID="valSum"
                                        DisplayMode="BulletList"
                                        runat="server"
                                        HeaderText="Você deve digitar o valor dos seguintes campos:"
                                        Font-Names="verdana"
                                        Font-Size="12" />
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>

        </form>
    </div>

Não é necessário configurar AutoEventWireup="true" no @Page da página porque o que irá disparar o evento de validação é o click no botão 'Validar'.

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 é ela que devemos utilizar para tomar decisões como o submit da página. Podemos também verficar o valor do parametro Page.IsValid no submit da página mas isto ocorre quando a página já foi enviada ao servidor.

Note que logo a seguir de cada controle a ser validado temos o validador do campo.

No final de todos os campos da páginas reservamos uma td só para exibir o resultado da validação : asp:ValidationSummary

Nos validadores temos o parâmetro Display="Static" para definir que desejamos reservar espaço para a exibição da critica ( no caso é um asterisco ) do campo. Se fosse 'Dynamic' o espaço não seria reservado e ao exibir a critica poderia haver um deslocamento dos itens na tela.

No exemplo o validador apenas verifica se foi clicado em algum dos cartões e se no campo 'Número do Cartão' foi digitado algo mas sem qualquer critica ou validação do número do cartão digitado.

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

Anexando funções ao Botão Validar

No momento o botão validar está apenas disparando o evento de validação mas não está dando submit no form.
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.