Jak wyłączyć ogłaszanie zwrotne w przycisku asp

135

Mam przycisk asp. Jest po stronie serwera, więc mogę go wyświetlać tylko zalogowanym użytkownikom, ale chcę, aby uruchamiał funkcję javascript i wydaje się, że gdy jest to runat = "server", zawsze wywołuje zdarzenie postback.

Mam też zwykły przycisk ( <input...>) nie działający na serwerze i działa dobrze ...

Jak sprawić, by ten przycisk uruchamiał tylko javascript, a nie ogłaszanie zwrotne?

dkarzon
źródło

Odpowiedzi:

263

Niech twój javascript zwróci false po zakończeniu.

<asp:button runat="server".... OnClientClick="myfunction(); return false;" />
womp
źródło
16
W wielu przypadkach ludzie używają onclick lub OnClientClick z taką składnią <asp: Button OnClientClick = "myFunction ()" />, gdzie myFunction () zwraca false i to nie wystarczy - musisz użyć OnClientClick = "return myFunction ()"
Bron Davies,
17
Musiałem dodać UseSubmitBehavior = "False", jak również; return false
rob
9
Upewnij się, że dodałeś „CausesValidation =" false "”, w przeciwnym razie doda on „WebForm_DoPostBackWithOptions” i kilka dodatkowych znaczników.
Carter Medlin
To nie zadziałało dla mnie w ASP.NET 4+, jednak odpowiedź Konstantina po prostu OnClientClick="return false"zadziałała.
TylerH
39
YourButton.Attributes.Add("onclick", "return false");

lub

<asp:button runat="server" ... OnClientClick="return false" />
Konstantin Tarkus
źródło
15

Aby uniknąć ogłaszania zwrotnego, możesz użyć akcji kliknięcia jquery i funkcji PreventDefault ()

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


$("#btnMyButton").click(function (e) {
// some actions here
 e.preventDefault();
}
Rameez
źródło
Jest to elegancka odpowiedź, ponieważ pozwala przetestować warunki do wyłączenia.
John Mott
1
Nigdy nie używaj PreventDefault, ponieważ spowoduje to zatrzymanie innych zdarzeń zależnych od tego zdarzenia -1
Piotr Kula
1
@ppumkin: disableDefault to świetny sposób na poinformowanie innych detektorów zdarzeń, że obsłużyłeś to zdarzenie, aby nie musieli tego robić. Myślę, że chodziło Ci o stopPropagation, co rzeczywiście uniemożliwia usłyszenie zdarzenia przez innych słuchaczy.
Sebbas
Yeaaaaaaaaaa. Nie. 4 lata później, a teraz stoję za tym jeszcze bardziej. Po prostu tego nie rób.
Piotr Kula
8

Rozważ to.

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

}
     </script>
Ramakrishnankt
źródło
6

Inni mają rację, że potrzebujesz oddzwonienia, aby zwrócić fałsz; jednak chciałbym dodać, że robienie tego przez ustawienie onclick jest brzydkim starym sposobem robienia rzeczy. Polecam przeczytać o dyskretnym javascript . Korzystanie z biblioteki, takiej jak jQuery, może ułatwić Ci życie, a HTML mniej powiązany z Twoim javascriptem (i jQuery jest teraz obsługiwany przez Microsoft !)

Neil Williams
źródło
4

ASP.NET zawsze generuje asp:Buttonjako plik input type=submit.
Jeśli potrzebujesz przycisku, który nie robi posta, ale potrzebujesz kontroli nad elementem po stronie serwera, utwórz proste wejście HTML z atrybutami type=buttonirunat=server .

Jeśli wyłączysz działania związane z klikaniem OnClientClick=return false, nie będzie to robić po kliknięciu, chyba że utworzysz funkcję taką jak:

function btnClick() {
    // do stuff
    return false;
}
Aristides Darlan
źródło
3

Nie podajesz, której wersji platformy .NET używasz.

Jeśli używasz wersji 2.0 lub nowszej, możesz użyć właściwości OnClientClick, aby wykonać funkcję JavaScript, gdy zostanie zgłoszone zdarzenie onclick przycisku.

Wszystko, co musisz zrobić, aby zapobiec wystąpieniu ogłaszania zwrotnego serwera, to powrót falsez wywołanej funkcji JavaScript.

OtisAardvark
źródło
3

dodatkowo dla zaakceptowanej odpowiedzi możesz użyć UseSubmitBehavior = "false" MSDN

Arbejdsglæde
źródło
ASP.NET dodaje; __doPostBack(do końca skryptu kliknięć klienta.
IvanH
3

W moim przypadku rozwiązałem dodawanie zwrotu w onClientClick:

Kod za

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

Powierzchnia projektowa

<asp:Button runat="server" ID="send" Text="Send" onClientClick="return verify()" />
Raphael
źródło
Jak uruchomić OnClickmetodę po tym.
5377037
2

możesz użyć kodu:

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

jeśli trzeba się poddać

...
<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
źródło
2

Z walidacją

W tym przykładzie użyłem dwóch kontrolek ddli txtboxszczęśliwego kodowania

 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
źródło
2

Możesz do tego użyć JQuery

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

niż w JQuery

$("#btnID").click(function(e){e.preventDefault();})
Vikas
źródło