none
[RESOLVIDO] Desabilitar duplo clique do botão em página de Download RRS feed

  • 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




    quinta-feira, 18 de maio de 2017 19:04

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
    segunda-feira, 22 de maio de 2017 13:26

Todas as Respostas

  • sexta-feira, 19 de maio de 2017 17:26
    Moderador
  • 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.

    segunda-feira, 22 de maio de 2017 13:05
    Moderador
  • 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
    segunda-feira, 22 de maio de 2017 13:26