Usuário com melhor resposta
[RESOLVIDO] Desabilitar duplo clique do botão em página de Download

Pergunta
-
Olá amigos,
Estou num dilema que não consigo resolver.
É o seguinte:
Tenho uma página no sistema que faz o download de um arquivo de texto. Esse arquivo as vezes demora pra ser criado, por conta de consultas em banco de dados e a montagem do layout, dependendo da quantidade de informação gravada no arquivo.
O usuário que baixa o arquivo, as vezes por pensar que não funcionou, aperta o botão novamente, fazendo com que o processo reinicie e continue lento.
O que eu estou tentando fazer é desabilitar o botão a partir do clique, alterar o texto do botão para "Aguarde..." e então ao fim do processo, o botão voltar a exibir o texto "Download".
Vi inúmeros exemplos na internet, com modal e etc, mas uma bem simples já chamou a atenção, que era esse de alterar o texto do botão.
Consigo fazer isso corretamente, o código altera o texto do botão como desejado e fica desabilitdo para clicar novamente, porém ao fim do processo do download, o botão não está voltando ao estado original, ficando como "Aguarde..." para sempre.
Sem o processo de download, funciona perfeitamente, utilizando Thread.Sleep(3000) por exemplo, o botão volta ao estado original.
Abaixo o código do botão que está funcionando, e o código do download do arquivo, onde eu acho que é o problema.
Botão:
<asp:Button ID="btnDownload" runat="server" Text="Download" OnClick="btnDownload_Click"
OnClientClick="this.disabled='true';this.value='Aguarde...';" UseSubmitBehavior="false" />
Download:
//Executa o download do arquivo após a criação string res = "~/Downloads/" + gs.nomeAIS; if (File.Exists(gs.filePath)) { Response.ClearContent(); Response.Clear(); Response.ContentType = contentType; Response.AddHeader("Content-Disposition", "attachment;filename=" + gs.nomeAIS); Response.TransmitFile(res); Response.Flush(); Response.End(); }
Meu pensamento é que tenha alguma coisa a ver com o Response.End(), me corrijam se estiver errado.
Fico no aguardo de alguma solução.
Obrigado!
Cleverson Darsie
- Editado Cleverson Darsie segunda-feira, 22 de maio de 2017 13:27 Resolução
Respostas
-
Olá amigos, continuei pesquisando, pois a resposta do welington jr não me ajudou muito.
Cheguei a uma conclusão que foi funcional e atendeu meu problema com quase 100% de efetividade.
Seguinte, desmembrei a tela de download em duas partes, uma parte faz a criação e a outra faz o papel do download.
Na primeira parte, que é onde mais demora e quero evitar o duplo clique, aparece a mensagem "Aguarde... " e um modal, na segunda parte, que é só exibir em tela pro usuário baixar, utilizei o método padrão de download.
Para fazer funcionar, utilizei um JavaScript personalizado chamado waitingDialog, que pode ser baixado por esse link:
https://bootsnipp.com/snippets/featured/quotwaiting-forquot-modal-dialog
Depois disso apenas adaptei no CodeBehind para atender minha solicitação.
Código do botão onde o arquivo é criado:
<asp:Button ID="btnProcessar" runat="server" CssClass="btn btn-primary sizeBtn" OnClick="btnProcessar_Click" Text="Processar" TabIndex="2" OnClientClick="this.disabled='true';this.value='Aguarde...'; waitingDialog.show('Aguarde enquanto o AIS está sendo gerado...');setTimeout(function() {waitingDialog.hide();}, 30000);" UseSubmitBehavior="false"/>
Coloquei o timeout do modal para 30 segundos, pois se o arquivo demorar mais de 30 segundos para sumir, ele fecha por conta desse timeout, caso contrário, se demorar menos de 30 segundos, ele some sozinho, redirecionando para a página de download.
Cleverson Darsie
- Marcado como Resposta Cleverson Darsie segunda-feira, 22 de maio de 2017 13:26
Todas as Respostas
-
- Editado welington jrModerator sexta-feira, 19 de maio de 2017 17:27
- Marcado como Resposta Guilherme Macedo SModerator segunda-feira, 22 de maio de 2017 13:05
- Não Marcado como Resposta Cleverson Darsie segunda-feira, 22 de maio de 2017 13:12
-
Bom dia,
Por falta de retorno esta thread esta encerrada !
Por gentileza, caso necessário abra uma nova thread.
Atenciosamente,
Guilherme Macedo S
Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita
TechNet Community Support
Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.
-
Olá amigos, continuei pesquisando, pois a resposta do welington jr não me ajudou muito.
Cheguei a uma conclusão que foi funcional e atendeu meu problema com quase 100% de efetividade.
Seguinte, desmembrei a tela de download em duas partes, uma parte faz a criação e a outra faz o papel do download.
Na primeira parte, que é onde mais demora e quero evitar o duplo clique, aparece a mensagem "Aguarde... " e um modal, na segunda parte, que é só exibir em tela pro usuário baixar, utilizei o método padrão de download.
Para fazer funcionar, utilizei um JavaScript personalizado chamado waitingDialog, que pode ser baixado por esse link:
https://bootsnipp.com/snippets/featured/quotwaiting-forquot-modal-dialog
Depois disso apenas adaptei no CodeBehind para atender minha solicitação.
Código do botão onde o arquivo é criado:
<asp:Button ID="btnProcessar" runat="server" CssClass="btn btn-primary sizeBtn" OnClick="btnProcessar_Click" Text="Processar" TabIndex="2" OnClientClick="this.disabled='true';this.value='Aguarde...'; waitingDialog.show('Aguarde enquanto o AIS está sendo gerado...');setTimeout(function() {waitingDialog.hide();}, 30000);" UseSubmitBehavior="false"/>
Coloquei o timeout do modal para 30 segundos, pois se o arquivo demorar mais de 30 segundos para sumir, ele fecha por conta desse timeout, caso contrário, se demorar menos de 30 segundos, ele some sozinho, redirecionando para a página de download.
Cleverson Darsie
- Marcado como Resposta Cleverson Darsie segunda-feira, 22 de maio de 2017 13:26