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 comments:
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.
Postar um comentário