Usuário com melhor resposta
Desabilitar botão Asp.Net no primeiro click

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
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".
- Sugerido como Resposta Robson William SilvaModerator sexta-feira, 28 de outubro de 2016 11:55
- Marcado como Resposta Junior Martins domingo, 30 de outubro de 2016 16:16
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".
-
-
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".
-
-
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".
- Sugerido como Resposta Robson William SilvaModerator sexta-feira, 28 de outubro de 2016 11:55
- Marcado como Resposta Junior Martins domingo, 30 de outubro de 2016 16:16