travar botão para evitar mais de uma solicitação.
Olá gente, estou com um problema e dei uma solução para ele porém achei que a solução que dei é ruim, gostaria de expor ele aqui para discutirmos.
Imaginem que temos uma pagina aspx com um formulário neste formulário temos uma textbox e um button o text box cadastra nome e o bottuon chama o evento.
Algo do tipo
CODE
<form id="form1" runat="server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</form>
E o botão chamando o seguinte evento.
CODE
protected void Button1_Click(object sender, EventArgs e)
{
//ROTINA DE INSERT NO BANCO DE DADOS
this.TextBox1.Text = "";
}
Vamos imagar também que esse insert demore 30 segundo o usuário clica no botão aguarda cerca de 30 segundos para que o texto que ele digitou no TextBox1 ser inserido no banco.
O problema é que no periodo entre o postback e a comunicação do server com o browser quando se clica no botão se o usuários impacientes clicam mais de uma vez no botão antes do postback acontecer faz com que seja varias vezes seja executado o evento Button1_Click.
Se o usuário clicar 6 vezes no batão mesmo antes de primeiro postback o eventos é executado 6 vezes
O meu objetivo é que quando o usuário clicar no botão não seja mais possivel clicar no botão até que o evento Button1_Click tenha rodado até o final. Fazendo o evento ser executado somente uma vez sem perigo de duplicar a execução.
Para isso eu fiz uma gambiara usando sessão algo como
CODE
protected void Button1_Click(object sender, EventArgs e)
{
int valor = 0;
try
{
int valor = Convert.ToInt16(Session["execucoes"]);
}
catch
{
valor += 1;
Session["execucoes"] = valor;
if (valor == 1)
{
//ROTINA DE INSERT NO BANCO DE DADOS
this.TextBox1.Text = "";
}
}
}
Isso força mesmo que o evento seja executado várias vezes em um postback apenas uma vez ele passe pelo cadastro.
Sei que isso é um gambiara mau feita do inferno fiz na preça se alguem tiver uma solução melhor e queria discutir agradeço.
Discussão (6)
Carregando comentários...