Fique 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), penso em postar um tópico 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, 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 um 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