none
cancelar o sumbit RRS feed

  • Pergunta

  • faço um submit na página assim que clico em um botão. isso está dentro de um updatepanel.

    e logo acima do update panel tem um updateprogress que aparece uma mensagem de executando.

    queria saber como eu paro esse submit e limpo o updadateprogress.

    quarta-feira, 17 de outubro de 2012 13:49

Todas as Respostas

  • Amigo, deixa ver se entendi, você quer interromper o post após o clique no botão? tem como dar mais detalhes?

    Rodrigo Reis Ferreira
    Microsoft Certified

    quarta-feira, 17 de outubro de 2012 16:49
  • isso mesmo. como seria? quando eu clicar num botão será executado um insert... só que durante essa execução eu posso ter a opção de cancelar a execução a qualquer momente. ou seja, interromper o post. entendeu?

    • Editado rafa-martin quarta-feira, 17 de outubro de 2012 17:06 rrr
    quarta-feira, 17 de outubro de 2012 17:05
  • Entendi, para cancelar um postback assíncrono utilize o PageRequestManager do namespace Sys.WebForms:

    No botão que irá cancelar o post

    <asp:Button runat="server" Text="AbortPostBack" ID="btnAbort" OnClientClick=" Sys.WebForms.PageRequestManager.getInstance().abortPostBack(); alert('Postback Cancelled'); "/>

    No evento ClientClick é chamado o método abortPostBack().

    Veja o código completo abaixo:

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Cancel Async PostBack</title>
        <script type="text/javascript">  
         
            function pageLoad()
            {       
                Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(cancelPostBack);
            }
           
            function cancelPostBack(sender, args)
            {
                if (Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack())        
                {
                    alert('One postback at a time please');
                    args.set_cancel(true);
                }
            }  
       
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:ScriptManager ID="ScriptManager1" runat="server">
            </asp:ScriptManager>
            <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
                <ContentTemplate>
                        <asp:Button runat="server" Text="PostBackFirst" ID="btnPostF"
                            onclick="btnPostF_Click"/>
                        <asp:Button runat="server" Text="PostBackSecond" ID="btnPostS"
                            onclick="btnPostS_Click"/>
                        <asp:Button runat="server" Text="AbortPostBack" ID="btnAbort"
                            OnClientClick="Sys.WebForms.PageRequestManager.getInstance().abortPostBack();
                            alert('Postback Cancelled');"/>
                        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>           
                </ContentTemplate>
            </asp:UpdatePanel>   
        </form>
    </body>
    </html>
    Fonte: http://www.dotnetcurry.com/ShowArticle.aspx?ID=176


    Rodrigo Reis Ferreira
    Microsoft Certified

    quarta-feira, 17 de outubro de 2012 17:30
  • cara esse exemplo que você pegou da net eu já vi e não rola

    o que acontece: eu tenho um updateprogress:

            <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1">
                <ProgressTemplate>
                   <div align="center" style="width: 100%;" id='loading'>
                        <asp:Panel ID="panelLoading" runat="server" Height="100%" Width="100%">
                            <img src="../Imagens/carregando.gif" / alt="">
                            <asp:Label ID="lblCarregando" runat="server" Font-Bold="False" Font-Size="Small"
                                Text="Gerando Balanço/DRE..." Font-Names="arial, helvetica, Serif"></asp:Label>
                        </asp:Panel>
                    </div>
               </ProgressTemplate>
            </asp:UpdateProgress>
           
           
    meu update panel

    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:Panel ID="pnl1" runat="server">
                   
       <asp:Button runat="server" Text="cancel" ID="cancel"/>
                   
                    </asp:Panel>
                </ContentTemplate>
    </asp:UpdatePanel>               


    no evento load do meu form faço o seguinte:

            Dim csname As String = "OnSubmitScript"
            Dim cstype As Type = Me.GetType()
            Dim cs As ClientScriptManager = Page.ClientScript

            HttpContext.Current.Session("Mensagem") = String.Empty
            If Not cs.IsOnSubmitStatementRegistered(cstype, csname) Then
                Dim cstext As String = "if (typeof(ValidatorOnSubmit) == 'function' && ValidatorOnSubmit() == false)return false; else { var myCtl = document.getElementById('" & Convert.ToString(Me.btFiltrar.ClientID) & "'); var myCtl1 = document.getElementById('" & Convert.ToString(Me.btView.ClientID) & "'); myCtl.value = 'Gerando Simulação...'; myCtl1.value = 'Visualizar...'; myCtl.disabled = true; myCtl1.disabled = true;}"
                cs.RegisterOnSubmitStatement(cstype, csname, cstext)
            End If
           
    faço isso porque quando a página está submetendo eu desabilito alguns objetos, para não correr o risco do usuário clicar num botão novamente, por exemplo.

    nesse exemplo que você me passou o já fiz o teste. e o que acontece?

    quando clico em cancelar continua com submit (aquele barrinha de progresso de carregando do ie fica ativa).
    o que deveria acontecer quando eu clicar em cancelar é parar o postbanck da página e habilitar os objetos novamente.

    entendeu?

    quarta-feira, 17 de outubro de 2012 17:40
  • não encontro nenhuma forma.
    quarta-feira, 17 de outubro de 2012 19:09
  • vou criar um exemplo e posto aki assim que possível. 

    Rodrigo Reis Ferreira
    Microsoft Certified

    quarta-feira, 17 de outubro de 2012 20:06
  • opa!!! conseguiu encontrar uma forma?
    quinta-feira, 18 de outubro de 2012 12:09
  • amigo, tem como passar o restante do seu código aspx? Uma coisa que fiquei na dúvida é como ta aparecendo a barra de carregamento do browser, porque como o botão que dispara ta dentro do UpdatePanel então irá executar de forma assíncrona.

    Rodrigo Reis Ferreira
    Microsoft Certified

    sexta-feira, 19 de outubro de 2012 18:03
  • segue:

     <form id="form1" runat="server">
            <asp:ScriptManager ID="ScriptManager1" runat="server"
                AsyncPostBackTimeout="3600"></asp:ScriptManager>
           
            <br />
       
            <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1">
                <ProgressTemplate>
                   <div align="center" style="width: 100%;" id='loading'>
                        <asp:Panel ID="panelLoading" runat="server" Height="100%" Width="100%">
                            <img src="../Imagens/carregando.gif" / alt="">
                            <asp:Label ID="lblCarregando" runat="server" Font-Bold="False" Font-Size="Small"
                                Text="Gerando Balanço/DRE..." Font-Names="arial, helvetica, Serif"></asp:Label>
                        </asp:Panel>
                      
                    </div>
               </ProgressTemplate>
            </asp:UpdateProgress>
           
            <br />
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <asp:Panel ID="pnl1" runat="server">
                        <br />
                                           
                        <asp:TextBox ID="txtCodigo" runat="server" Width="80px" Visible="false"></asp:TextBox>
                        <table bgcolor="#A5BEE7" style="width: 75%" border="0" align="center">
                            <tr>
                                <td class="style10" style="background- top; background-image: url('../Imagens/coolite.gif')" >
                                    <table style="width:100%;" cellpadding="2" cellspacing="2" border="0">
                                        <tr>
                                            <td align="right" valign="bottom" width="60%">
                                               <asp:Button ID="btExecutar" runat="server" Text="Executar" Width="150px" Height="40px"/>
                                            </td>
                                        </tr>
                                      
                                    </table>
                                </td>
                            </tr>
                        </table>
                        <br />
                    </asp:Panel>
                </ContentTemplate>
            </asp:UpdatePanel>
        </form>
       
    no evento onclick do botão btExecutar eu chamo uma procedure. E começa a execuatar.

    O que preciso é cancelar esse procesamento a qualquer momento que eu queira. Ou seja, cancelar o submit.

    segunda-feira, 22 de outubro de 2012 14:02