none
Confirm no code behind RRS feed

  • Pergunta

  • Bom dia meus queridos, venho pedir uma ajuda que talvez seja uma bobagem para vocês que tem experiência em programação asp.net.

    O que procuro é uma maneira de usar o confirm do javascript dentro do código c#, ou seja se ok, faz isso se não não ha ação

    O script dentro do c# eu crio assim:  

    string myScript = "window.confirm('Deseja Realmente excluir esta solicitação?')";

    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "myscript", myScript, true);

    ele exibe o alerta, mas não conforme deveria, a ação é executada independente do script, se alguém puder me ajudar ficarei muito agradecido.

    Luciano Auad

    quarta-feira, 29 de agosto de 2012 11:56

Respostas

  • Olá liomendes.

    Esta é uma dúvida muito comum.

    Este código que você está utilizando registra um script client na sua página html, porém DEPOIS de ter chegado no code-behind (server).

    Uma solução nesse caso é implementar uma confirmação no client ANTES mesmo de chegar no server, algo do tipo:

    <asp:Button ID="btnMeuBotao" runat="server" Text="Executa Ação" OnClientClick="return ConfirmaAcao()" onclick="btnMeuBotao_Evento_Server" />

    Perceba que o botão tem uma chamada para uma função client e uma chamada de evento server (OnClientClick e OnClick)

    Ainda na sua página, você adiciona o script de confirmação:

    <head runat="server">
        <title>Minha página</title>
    
        <script>
            function ConfirmaAcao() {
                var retorno = window.confirm("Deseja Realmente excluir esta solicitação?")
                return retorno;
            }
    </script>
    </head>


    Explicação:

    A função client window.confirm() retorna um bool, sendo true se clicar Ok ou false se clicar Cancel

    Sendo true (ok), aí sim é executado o código no code-behind

    Sendo false (cancel), não faz nada e a página permanece estática

    Desse modo você garante que o código no code-behind só será executado caso o usuário confirme a ação.

    Espero ter ajudado

    -------------------------

    Tiago Saraiva Ferreira

    • Marcado como Resposta liomendes quarta-feira, 29 de agosto de 2012 15:27
    quarta-feira, 29 de agosto de 2012 14:36

Todas as Respostas

  • Olá liomendes.

    Esta é uma dúvida muito comum.

    Este código que você está utilizando registra um script client na sua página html, porém DEPOIS de ter chegado no code-behind (server).

    Uma solução nesse caso é implementar uma confirmação no client ANTES mesmo de chegar no server, algo do tipo:

    <asp:Button ID="btnMeuBotao" runat="server" Text="Executa Ação" OnClientClick="return ConfirmaAcao()" onclick="btnMeuBotao_Evento_Server" />

    Perceba que o botão tem uma chamada para uma função client e uma chamada de evento server (OnClientClick e OnClick)

    Ainda na sua página, você adiciona o script de confirmação:

    <head runat="server">
        <title>Minha página</title>
    
        <script>
            function ConfirmaAcao() {
                var retorno = window.confirm("Deseja Realmente excluir esta solicitação?")
                return retorno;
            }
    </script>
    </head>


    Explicação:

    A função client window.confirm() retorna um bool, sendo true se clicar Ok ou false se clicar Cancel

    Sendo true (ok), aí sim é executado o código no code-behind

    Sendo false (cancel), não faz nada e a página permanece estática

    Desse modo você garante que o código no code-behind só será executado caso o usuário confirme a ação.

    Espero ter ajudado

    -------------------------

    Tiago Saraiva Ferreira

    • Marcado como Resposta liomendes quarta-feira, 29 de agosto de 2012 15:27
    quarta-feira, 29 de agosto de 2012 14:36
  • Obrigado Tiago, em minha implementação eu queria algo que precisasse ser confirmado caso algo acontecesse no ambiente de uso, por exemplo: quando eu clico em publicar esta pagina ela é publicada, mas se eu deixei de preencher meu nome a pagina pergunta, deixar sem nome ou alterar?

    Obrigado Tiago.

    quarta-feira, 29 de agosto de 2012 15:30