Validation en ASP.NET 2.0: Avisar con un alert

Como ya conocéis por el artículo Validation en ASP.NET 2.0, en ASP.NET hay varios controles Web que nos ayudan a controlar que el tipo de información que se ha rellenado en un formulario es el adecuado.

Por ejemplo, los Validadores de ASP.NET nos permiten controlar que un campo no está vacío, que está dentro de cierto rango, que responde a la estructura de un eMail, que no excede de N caracteres... y prácticamente cualquier cosa.

Pero, ¿cómo nos avisa ASP.NET de que los datos de un formulario no son los correctos?, con simple y llano texto: nada más... ¿y si lo que queremos es avisar con un alert javascript?

Pues para ello, tenemos dos opciones:
1.- Olvidarnos de los validadores ASP.NET y hacerlo todo con javascript. Es el método "artesanal", pero funciona igualmente. Os recomiendo este enlace si sois tan valientes como para hacerlo de este modo.
2.- Utilizando un pequeño truquito, que explicamos en varios pasos:

Paso 1
Veamos el código de nuestro página .aspx:

    <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" ValidationGroup="a" />
    <asp:TextBox ID="TextBox1" runat="server" ValidationGroup="a"></asp:TextBox>
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1"
        ErrorMessage="*" ValidationGroup="a" Display="Dynamic" EnableClientScript="False"> </asp:RequiredFieldValidator>


Tenemos tres elementos: un botón, un Textbox y un RequiredFieldValidator, por lo que nuestra intención es controlar que el TextBox no pueda estar vacío cuando hagamos clic sobre el botón.
Lo primero que debemos ver es que los tres elementos tienen el mismo ValidationGroup, lo cual es una buena práctica aunque sólo tengamos un formulario.
Lo segundo que debemos ver es que el RequiredFieldValidator tiene el atributo EnableClientScript puesto a false. Con ello conseguimos que se compruebe si el TextBox está vacío desde el servidor y no con javascript... luego veremos el porqué.

Paso 2
Nuestro tag body debe tener este aspecto:

    <body runat="server" id="myBody" enableviewstate="false">

De este modo podremos manejar los elementos del body desde código. El hecho de enableviewstate="false" lo veremos más tarde.

Paso 3
Veamos nuestro código .aspx.cs

    protected void Button1_Click(object sender, EventArgs e)
    {
        Page.Validate("a");

        if (!Page.IsValid)
        {
            mybody.Attributes.Add("onload", "alert('Rellena el campo de Texto')");
        }
    }


Como es práctica habitual, lo primero que debemos hacer el Page.Validate("a"), para validar nuestro validation Group. Si la página no está correctamente validada (en nuestro caso, el TextBox está vacío) lo que hacemos es añadir el atributo onload con el valor "alert('Mensaje')", de modo que cuando se vuelva a recargar la página se muestre el alert avisando del error.
De ahí el hecho de que el body tenga enableviewstate="false", puesto que la próxima vez que recarguemos la página no nos interesa que vuelva a salir el alert de nuevo.

Espero que os haya gustado el truquito