Voy a mostrar un ejemplo muy sencillo y practico de como deshabilitar el botón de login cuando el usuario le da click para evitar el doble post-back.
El ejemplo esta testeado en IE 7, Firefox 3.0.11 y Chrone 2.0
Voy a mostrar todo el HTML de la pagina de una pagina de login y luego voy a explicar los 2 puntos que hacen que funcione.
El HTML es este:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Mi pagina de Login</title>
</head>
<body>
<form id="form1" runat="server" submitdisabledcontrols =true >
<div>
<table>
<tr>
<td style="width: 100px">
<asp:Label ID="Label1" runat="server" Text="Password"></asp:Label></td>
<td style="width: 100px">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></td>
<td style="width: 100px">
</td>
</tr>
<tr>
<td style="width: 100px; height: 21px">
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label></td>
<td style="width: 100px; height: 21px">
<asp:TextBox ID="TextBox2" runat="server" TextMode="Password" Width="149px"></asp:TextBox></td>
<td style="width: 100px; height: 21px">
</td>
</tr>
<tr>
<td style="width: 100px">
</td>
<td style="width: 100px; text-align: center">
<asp:Button ID="Button1" runat="server" Text="Ingresar" OnClientClick ="this.value='Validando...'; this.disabled=true; __doPostBack('Button1','')" OnClick="Button1_Click" /></td>
<td style="width: 100px">
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
Del HTML observamos 2 puntos importantes el primero es la propiedad submitdisabledcontrols en true. Gracias a este propiedad podemos forzar el postback del botón cuando éste está bloqueado.
1: <form id="form1" runat="server" submitdisabledcontrols =true >
Y el 2do punto es el código javascript del botón de login:
1: <asp:Button ID="Button1" runat="server" Text="Ingresar" OnClientClick ="this.value='Validando...'; this.disabled=true; __doPostBack('Button1','')" OnClick="Button1_Click" />
Aquí, en la propiedad OnClientClick, es donde ingresamos todo el código javascript, que consta del cambio del Label, el bloqueo del botón y el postback de la pagina. Cabe destacar que el __doPostback tiene que ir ultimo para que realice el postback después de hacer los cambios visibles en el cliente.
Bueno realmente es muy sencillo, es simple y es claro (kuak)
Saludos.

