none
Desabilitar botão Asp.Net no primeiro click RRS feed

  • Pergunta

  • Pessoal tenho uma pagina Asp.Net onde tenho varios objetos tenho o scriptmanager e um update panel que esta configurado como UpdateMode = Conditional e estou precisando desabilitar um botão logo no primeiro click para evitar que o usuário clique varias vezes nesse botão para evitar geração de registros e arquivos de forma indiscriminada. Ja tentei de varias formas realizar esse processo de varias formas e não da certo eu ate consigo desabilitar com uma funcionalidade que consegui na internet porem tenho que fazer o seguinte também

    1) - Ao clicar nesse botão vou mostrar uma mensagem javascript Alert perguntando se deseja confirmar [OK]-[Cancelar] se eu clico em OK ele funciona mas se eu clico em Cancelar ele também executa o codigo do botão e não deveria

    Codigo que coloquei no evento Page_Load

                    PostBackOptions optionsSubmit = new PostBackOptions(btnEdiArqBM);
                    btnEdiArqBM.OnClientClick = "confirmaGerLayout(this, 'Aguarde, Gerando ...'); ";
                    btnEdiArqBM.OnClientClick += ClientScript.GetPostBackEventReference(optionsSubmit);

    Codigo JavaScript

    <script language="javascript" type="text/javascript">

        // desabilita o botao
        function disableButtonOnClick(oButton, sButtonText) {
            oButton.disabled = true;
            // altera o texto do botão
            oButton.value = sButtonText;
        }

        function confirmaGerLayout(oButton, sButtonText) {

            var oValor;
            var sMsg;

            sMsg += "Atenção !!!\n";
            sMsg += "Processo de geração de arquivos de layout para importação de pedidos.\n";
            sMsg += "Essa operação irá gerar os arquivos separados por loja na RMS.\n\n";
            sMsg += "*** Ao final da rotina será exibido o codigo da extensão de cada arquivo gerado ***\n\n";
            sMsg += "Confirma a geração do(s) arquivo(s) ?";        
            
            oValor = confirm(sMsg);

            if (oValor == true) {
                disableButtonOnClick(oButton, sButtonText);
            }

            return oValor;
        }
    </script>   


    Junior

    quinta-feira, 27 de outubro de 2016 10:39

Respostas

  • Agora que eu prestei atenção que você está usando o ClientScript.GetPostBackEventReference e concatenando no OnClientClick do mesmo botão.

    Neste caso o que você precisa fazer é verificar se o retorno da confirmaGerLayout é true e só então chamar o evento de PostBack.

    Tente assim então:

    btnEdiArqBM.OnClientClick = "if (confirmaGerLayout(this, 'Aguarde, Gerando ...')) {";

    btnEdiArqBM.OnClientClick += ClientScript.GetPostBackEventReference(optionsSubmit);

    btnEdiArqBM.OnClientClick += "} else { return false; }";


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quinta-feira, 27 de outubro de 2016 16:33

Todas as Respostas

  • Altere o código da seguinte linha para ter um return antes do nome da função:

    btnEdiArqBM.OnClientClick = "return confirmaGerLayout(this, 'Aguarde, Gerando ...'); ";


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quinta-feira, 27 de outubro de 2016 12:23
  • Fiz dessa forma que você me passou porém agora o codigo do botão btnEdiArqBM não executa quando eu confirmo na mensagem 

    Junior

    quinta-feira, 27 de outubro de 2016 13:32
  • A lógica ficou inversa então. Altere para

    btnEdiArqBM.OnClientClick = "return !confirmaGerLayout(this, 'Aguarde, Gerando ...'); ";


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quinta-feira, 27 de outubro de 2016 13:45
  • Olha ate testei dessa forma que você passou para ver se a logica não estava inversa mas não deu certo também viu

    Junior

    quinta-feira, 27 de outubro de 2016 14:05
  • Agora que eu prestei atenção que você está usando o ClientScript.GetPostBackEventReference e concatenando no OnClientClick do mesmo botão.

    Neste caso o que você precisa fazer é verificar se o retorno da confirmaGerLayout é true e só então chamar o evento de PostBack.

    Tente assim então:

    btnEdiArqBM.OnClientClick = "if (confirmaGerLayout(this, 'Aguarde, Gerando ...')) {";

    btnEdiArqBM.OnClientClick += ClientScript.GetPostBackEventReference(optionsSubmit);

    btnEdiArqBM.OnClientClick += "} else { return false; }";


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quinta-feira, 27 de outubro de 2016 16:33