Como desabilitar um botão após o clique usando ASP.Net (C#)

Depois de muita insistência vou fazer o meu primeiro post aqui no blog. Fiquei muito tempo pensando em que tipo de assunto abordar, mas acho que quando se trata de um blog de informática, mais especificamente pra quem desenvolve (assim como eu), temos que postar um tópico assim que encontramos alguma dificuldade e achamos a solução.
Como não tenho feito muita coisa nova ultimamente, fui buscar nas soluções de problemas básicos e antigos que encontramos em projetos anteriores. Uma dessas soluções, que é resolvida basicamente com javascript, é desabilitar um botão logo após este ser clicado, para evitar que um usuário clique várias vezes neste, causando várias requisições ao servidor e quem sabe um problema inesperado.
Nós usamos um método que fica em namespace separado, chamado Common, em que passamos o botão e o texto do botão após o clique (algo como "Aguarde"), como parâmetros.
Veja abaixo:


public static void DisableOnClick(System.Web.UI.WebControls.Button btn, string Message)
{
string theScript = "";
if ( btn.CausesValidation )
{
theScript = @"
if (typeof(Page_ClientValidate) == 'function')
{
if (Page_ClientValidate() == false )
return false;
}";
}
theScript += @"
this.value = '" + Message + @"';
this.disabled = true;
document.getElementById('" + btn.ClientID + @"')
.disabled = true;"
+

btn.Page.ClientScript.GetPostBackEventReference(
btn, string.Empty) + @";";


btn.Attributes["onclick"] = theScript;
}



Basicamente o que o método faz é criar um script e anexar ao evento de clique do botão. Este script verifica se o botão faz algum tipo de validação e, caso afirmativo, executa essa função, depois o botão é desabilitado, o novo texto é setado e é feita a chamada de postback que está anexada ao botão.

Exemplo de uso:

private void Page_Load(object sender, System.EventArgs e)
{
Common.DisableOnClick(btnRegister,
"Aguarde...");
}


Simples, prático e útil... Enjoy ;)

Comentários

Anônimo disse…
Cara eu nunca faço comentários em blogs assim, e pra falar a verdade ainda nem testei o código. Mas o que eu adorei nesse post foi a dinâmica e a praticidade do jeito que foi abordado, continue sempre assim!! Obrigado.

Postagens mais visitadas