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 ;)

1 تعليقات

أحدث أقدم