So deaktivieren Sie das Postback auf einer ASP-Schaltfläche


135

Ich habe einen Asp-Knopf. Es ist serverseitig, so dass ich es nur für angemeldete Benutzer anzeigen kann, aber ich möchte, dass es eine Javascript-Funktion ausführt, und es scheint, dass es immer das Postback-Ereignis aufruft, wenn es runat = "server" ist.

Ich habe auch eine normale Schaltfläche ( <input...>), die nicht auf dem Server ausgeführt wird und die einwandfrei funktioniert ...

Wie kann ich dafür sorgen, dass auf dieser Schaltfläche nur Javascript und kein Postback ausgeführt wird?

Antworten:


263

Lassen Sie Ihr Javascript falsch zurückgeben, wenn es fertig ist.

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

16
In vielen Fällen verwenden Benutzer einen Onclick oder OnClientClick mit dieser Syntax <asp: Button OnClientClick = "myFunction ()" />, wobei myFunction () false zurückgibt und dies nicht ausreicht - Sie müssen OnClientClick = "return myFunction ()" verwenden.
Bron Davies

17
Ich musste UseSubmitBehavior = "False" sowie; return false
rob

9
Stellen Sie sicher, dass Sie 'UrsachenValidation = "false"' hinzufügen. Andernfalls werden 'WebForm_DoPostBackWithOptions' und eine Reihe zusätzlicher Markups hinzugefügt.
Carter Medlin

Dies hat bei mir in ASP.NET 4+ nicht funktioniert, aber Konstantins Antwort von hat einfach OnClientClick="return false"funktioniert.
TylerH

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

oder

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

15

Sie können die Aktion jquery click verwenden und die Funktion präventDefault () verwenden, um ein Postback zu vermeiden

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


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

Dies ist eine elegante Antwort, da Sie damit testen können, welche Bedingungen deaktiviert werden sollen.
John Mott

1
Verwenden Sie niemals präventDefault, da dies andere Ereignisse stoppt, die auf diesem Ereignis beruhen. -1
Piotr Kula

1
@ppumkin: präventDefault ist eine großartige Möglichkeit, anderen Ereignis-Listenern mitzuteilen, dass Sie dieses Ereignis behandelt haben, damit sie dies nicht tun müssen. Ich denke, was Sie meinten, war stopPropagation, was tatsächlich verhindert, dass das Ereignis überhaupt von anderen Ereignishörern gehört wird.
Sebbas

Yeaaaaaaaaaa. Nein. 4 Jahre später und ich stehe jetzt noch mehr dahinter. Tu einfach nichts davon.
Piotr Kula

8

Bedenken Sie.

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

}
     </script>

6

Die anderen haben Recht, dass Sie Ihren Rückruf benötigen, um false zurückzugeben. Ich möchte jedoch hinzufügen, dass es eine hässliche alte Art ist, Dinge zu tun, indem man den Onclick setzt. Ich würde empfehlen, über unauffälliges Javascript zu lesen . Die Verwendung einer Bibliothek wie jQuery könnte Ihnen das Leben erleichtern und den HTML-Code weniger an Ihr Javascript koppeln (und jQuery wird jetzt von Microsoft unterstützt !).


4

ASP.NET generiert immer asp:Buttonals input type=submit.
Wenn Sie eine Schaltfläche möchten, die keinen Beitrag erstellt, aber eine Steuerung für das Element auf der Serverseite benötigt, erstellen Sie eine einfache HTML-Eingabe mit Attributen type=buttonund runat=server.

Wenn Sie die Ausführung von Klickaktionen deaktivieren OnClientClick=return false, wird beim Klicken nichts ausgeführt, es sei denn, Sie erstellen eine Funktion wie:

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

3

Sie sagen nicht, welche Version des .NET Frameworks Sie verwenden.

Wenn Sie Version 2.0 oder höher verwenden, können Sie die OnClientClick-Eigenschaft verwenden, um eine Javascript-Funktion auszuführen, wenn das Onclick-Ereignis der Schaltfläche ausgelöst wird.

Alles, was Sie tun müssen, um ein Server-Postback zu verhindern, ist die Rückkehr falsevon der aufgerufenen JavaScript-Funktion.



3

In meinem Fall habe ich das Hinzufügen von return im onClientClick gelöst:

Code dahinter

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

Designoberfläche

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

So führen Sie die OnClickMethode danach aus.
5377037

2

Sie können den Code verwenden:

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

wenn nee einreichen

...
<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

Mit Validierung

In diesem Beispiel habe ich zwei Steuerelemente verwendet ddlund txtboxhabe eine fröhliche Codierung

 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

Sie können dafür JQuery verwenden

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

als in JQuery

$("#btnID").click(function(e){e.preventDefault();})
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.