Come disabilitare il postback su un pulsante asp


135

Ho un pulsante asp. È lato server, quindi posso mostrarlo solo per gli utenti che hanno effettuato l'accesso, ma voglio che esegua una funzione javascript e sembra che quando runat = "server" chiama sempre l'evento postback.

Ho anche un pulsante normale ( <input...>) che non funziona sul server e funziona bene ...

Come posso fare in modo che questo pulsante esegua solo javascript e non postback?

Risposte:


263

Lascia che il tuo javascript ritorni falso al termine.

<asp:button runat="server".... OnClientClick="myfunction(); return false;" />

16
In molti casi le persone usano un onclick o OnClientClick con questa sintassi <asp: Button OnClientClick = "myFunction ()" /> dove myFunction () restituisce false e questo non è abbastanza - devi usare OnClientClick = "return myFunction ()"
Bron Davies,

17
Ho dovuto aggiungere UseSubmitBehavior = "False", nonché; return false
rob

9
Assicurati di aggiungere 'CauseValidation = "false"', altrimenti aggiungerà 'WebForm_DoPostBackWithOptions' e un sacco di markup extra.
Carter Medlin,

Questo non ha funzionato per me in ASP.NET 4+, tuttavia la risposta di Konstantin ha semplicemente OnClientClick="return false"funzionato.
TylerH,

39
YourButton.Attributes.Add("onclick", "return false");

o

<asp:button runat="server" ... OnClientClick="return false" />

15

È possibile utilizzare l'azione clic jquery e utilizzare la funzione preventDefault () per evitare il postback

<asp:button ID="btnMyButton" runat="server" Text="MyButton" />


$("#btnMyButton").click(function (e) {
// some actions here
 e.preventDefault();
}

Questa è una risposta elegante perché ti consente di verificare le condizioni da disabilitare.
John Mott

1
Non usare mai preventDefault in quanto fermerà altri eventi che si basano su questo evento -1
Piotr Kula

1
@ppumkin: preventDefault è un ottimo modo per dire agli altri ascoltatori di eventi che hai gestito questo evento in modo che non debbano farlo. Penso che quello che intendevi fosse stopPropagation, che in effetti impedisce all'evento di essere ascoltato anche da altri ascoltatori di eventi.
Sebbas,

Yeaaaaaaaaaa. no. 4 anni dopo e ora lo sostengo ancora di più. Basta non fare nulla di tutto ciò.
Piotr Kula,

8

Considera questo.

<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequest);
function BeginRequest(sender, e) {
    e.get_postBackElement().disabled = true;

}
     </script>

6

Gli altri hanno ragione sul fatto che è necessario il callback per restituire false; tuttavia vorrei aggiungere che farlo impostando onclick è un brutto vecchio modo di fare le cose. Consiglierei di leggere javascript discreto . L'uso di una libreria come jQuery potrebbe semplificarti la vita e l'HTML meno accoppiato al tuo javascript (e jQuery è ora supportato da Microsoft !)


4

ASP.NET genera sempre asp:Buttoncome input type=submit.
Se vuoi un pulsante che non fa un post, ma hai bisogno di un certo controllo per l'elemento sul lato server, crea un semplice input HTML con attributi type=buttone runat=server.

Se disabiliti le azioni clic OnClientClick=return false, non farà nulla al clic, a meno che tu non crei una funzione come:

function btnClick() {
    // do stuff
    return false;
}

3

Non dici quale versione di .NET framework stai usando.

Se si utilizza v2.0 o versione successiva, è possibile utilizzare la proprietà OnClientClick per eseguire una funzione Javascript quando viene generato l'evento onclick del pulsante.

Tutto quello che devi fare per evitare che si verifichi un postback del server è il ritorno falsedalla funzione JavaScript chiamata.


3

inoltre per la risposta accettata è possibile utilizzare UseSubmitBehavior = "false" MSDN


Aggiunge ASP.NET; __doPostBack(alla fine dello script clic del client.
IvanH,

3

Nel mio caso, ho risolto l'aggiunta di return in onClientClick:

Codice dietro

function verify(){
  if (document.getElementById("idName").checked == "") {
    alert("Fill the field");
    return false;
  }
}

Superficie di progettazione

<asp:Button runat="server" ID="send" Text="Send" onClientClick="return verify()" />

Come eseguire il OnClickmetodo dopo questo.
5377037

2

puoi usare il codice:

<asp:Button ID="Button2" runat="server"
     Text="Pulsa"
     OnClientClick="this.disabled=true"
     UseSubmitBehavior="False"/>

se necessario inviare

...
<form id="form1" runat="server" onsubmit="deshabilita()">
...
<script type="text/javascript">
    function deshabilita()
    {
        var btn = "<%= Button1.ClientID %>";
        if (confirm("Confirme postback"))
        {
            document.getElementById(btn).disabled = true;
            return true;
        }
        return false;
    }
</script>


2

Con Convalida

In questo esempio ho usato due controlli ddle txtboxho una buona codifica

 asp:ScriptManager ID="script1" runat="server" /asp:ScriptManager

    asp:UpdatePanel ID="Panel1" runat="server"
       ContentTemplate

// ASP BUTTON
asp:Button ID="btnSave" runat="server" Text="Save" class="btn btn-success" OnClientClick="return Valid()" OnClick="btnSave_Click"


   /ContentTemplate    
    /asp:UpdatePanel    

  <script type="text/javascript">
        function Valid() {

            if ($("#ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").val() == 0) {
                alert("Please select YOUR TEXT");
                $("#ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").focus();
                return false;
            }

            if ($("#ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").val().length == 0) {
                alert("Please Type YOUR TEXT");
                $("ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").focus();
                return false;
            }
            return true;
        }
</script>

2

È possibile utilizzare JQuery per questo

<asp:Button runat="server" ID="btnID" />

che in JQuery

$("#btnID").click(function(e){e.preventDefault();})
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.