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?

Dkarzon
quelle

Antworten:

263

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

<asp:button runat="server".... OnClientClick="myfunction(); return false;" />
womp
quelle
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" />
Konstantin Tarkus
quelle
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();
}
Rameez
quelle
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>
Ramakrishnankt
quelle
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 !).

Neil Williams
quelle
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;
}
Aristides Darlan
quelle
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.

OtisAardvark
quelle
3

Zusätzlich können Sie für akzeptierte Antworten UseSubmitBehavior = "false" MSDN verwenden

Arbejdsglæde
quelle
ASP.NET fügt hinzu; __doPostBack(bis zum Ende des Client-Klickskripts.
IvanH
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()" />
Raphael
quelle
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>

Elvia Soto
quelle
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>
Praneeth
quelle
2

Sie können dafür JQuery verwenden

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

als in JQuery

$("#btnID").click(function(e){e.preventDefault();})
Vikas
quelle