it-swarm.com.de

Deaktivieren Sie die asp.net-Schaltfläche nach dem Klicken, um ein Doppelklicken zu verhindern

Ich habe eine ASP.NET-Schaltfläche, die ich deaktivieren muss, nachdem der Benutzer darauf geklickt hat, um das Doppelklicken zu verhindern. Sobald das Senden abgeschlossen ist, muss es erneut aktiviert werden. Kann mir jemand dabei helfen?

38
Goutham

Ich habe das gefunden und es funktioniert:

btnSave.Attributes.Add(
    "onclick", 
    "this.disabled = true;" + ClientScript.GetPostBackEventReference(btnSave, null) + ";");
31
gkneo

Hier ist eine Lösung, die für das asp.net-Schaltflächenobjekt funktioniert. Fügen Sie im Frontend diese Attribute zu Ihrem asp hinzu: Button definition:

<asp:Button ... OnClientClick="this.disabled=true;" UseSubmitBehavior="false" />

Fügen Sie diesen Code am Ende des Click-Event-Handler-Methodenaufrufs am Ende hinzu (vorzugsweise in einem finally-Block).

myButton.Enabled = true;
29
kmonty

Überprüfen Sie diesen Link, der einfachste Weg, und die Validierungen werden nicht deaktiviert.

http://aspsnippets.com/Articles/Disable-Button-before-PageBack-in-ASP.Net.aspx

Wenn Sie z.

  <form id="form1" runat="server">
      <asp:Button ID="Button1" runat="server" Text="Button1" OnClick="Button1_Clicked" />
  </form>

Dann kannst du verwenden

  <script type = "text/javascript">
  function DisableButton() {
      document.getElementById("<%=Button1.ClientID %>").disabled = true;
  }
  window.onbeforeunload = DisableButton;
  </script>

Deaktivieren der Schaltfläche if und after, wenn die Überprüfung erfolgreich war, genauso wie die Seite ein Server-Postback ausführt.

15

Wenn Sie das Doppelklicken aufgrund eines langsam reagierenden serverseitigen Codes verhindern möchten, funktioniert dies gut:

<asp:Button ... OnClientClick="this.disabled=true;" UseSubmitBehavior="false" />

Versuchen Sie, ein Threading.Thread.Sleep (5000) für das _Click () - Ereignis auf dem Server zu erstellen, und Sie werden sehen, dass die Schaltfläche für die Zeit deaktiviert ist, zu der der Server das Click-Ereignis verarbeitet.

Es ist auch nicht notwendig, dass der serverseitige Code die Schaltfläche erneut aktiviert.

7
Shaun Keon

Wenn es jemanden interessiert, fand ich diesen Beitrag anfangs, aber ich nutze ASP.NETs Build in Validation auf der Seite. Die Lösungen funktionieren, deaktivieren Sie jedoch die Schaltfläche, auch wenn sie überprüft wurde. Sie können den folgenden Code verwenden, um die Schaltfläche nur dann zu deaktivieren, wenn die Seitenüberprüfung bestanden wird.

<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Submit" OnClientClick=" if ( Page_ClientValidate() ) { this.value='Submitting..'; this.disabled=true; }" UseSubmitBehavior="false" />
3
eqiz
<asp:Button ID="btnSend" runat="server" Text="Submit"  OnClick="Button_Click"/>

        <script type = "text/javascript">
            function DisableButton()
            {
                document.getElementById("<%=btnSend.ClientID %>").disabled = true;
            }
            window.onbeforeunload = DisableButton;
        </script>
3
Reshma

Sie können dazu das clientseitige onclick event verwenden:

yourButton.Attributes.Add("onclick", "this.disabled=true;");
3

Sie müssen nur 2 Attribute für die Schaltfläche "asp" hinzufügen:

OnClientClick="this.disabled='true';"  UseSubmitBehavior="false"

z.B.

<asp:Button ID="Button1" runat="server" Text="TEST" OnClientClick="this.disabled='true';"  UseSubmitBehavior="false" CssClass="button-content btnwidth" OnClick="ServerSideMethod_Click"  />

Für mehr Details:

https://bytes.com/topic/asp-net/answers/918280-disable-button-click-prevent-multiple-postbacks

2
Sachin Karche

Deaktivieren Sie die Schaltfläche im OnClick-Ereignis und aktivieren Sie sie anschließend im Callback-Ereignishandler AJAX erneut. So mache ich es mit jQuery.

<script>
$(document).ready(function() {

    $('#buttonId').click(function() {
         $(this).attr('disabled', 'disabled');
         callAjax();
    });

});

function callAjax()
{
    $.ajax({
      url: 'ajax/test.html',
      success: function(data) {
         //enable button
         $('#buttonId').removeAttr('disabled');

      }
    });
}
</script>
2
rick schott

jQuery verwenden:

$('form').submit(function(){
    $(':submit', this).click(function() {
        return false;
    });
});
1
mtntrailrunner

Diese Lösung funktioniert, wenn Sie asp.net-Validatoren verwenden:

<script language="javascript" type="text/javascript">
function disableButton(sender,group)
{
    Page_ClientValidate(group);
    if (Page_IsValid)
    {
        sender.disabled = "disabled";
        __doPostBack(sender.name, '');
    }
}</script>

und ändern Sie die Schaltfläche:

<asp:Button runat="server" ID="btnSendMessage" Text="Send" OnClick="btnSendMessage_OnClick" OnClientClick="disableButton(this,'theValidationGroup')" CausesValidation="true" ValidationGroup="theValidationGroup" />
1
Matteo Conta

Ich mag es, den Button zu deaktivieren und ein Postback aufzurufen. Auf diese Weise wird der Code dahinter immer noch ausgeführt, nachdem der Button deaktiviert wurde.

so füge ich hinter dem Code an:

btnProcess.Attributes.Add("onclick", " this.disabled = true; __doPostBack('btnProcess', ''); return false;")

Aktivieren Sie anschließend die Schaltfläche im Code dahinter:

btnProcess.Enabled = True
1
Taylor Brown

Versuchen Sie das, es hat bei mir funktioniert

<asp:Button ID="button" runat="server" CssClass="normalButton" 
Text="Button"  OnClick="Button_Click" ClientIDMode="Static" 
OnClientClick="this.disabled = true; setTimeout('enableButton()', 1500);" 
UseSubmitBehavior="False"/>  

Dann 

<script type="text/javascript">
function enableButton() {
document.getElementById('button').disabled = false;
}
</script>

Sie können die Verzögerungszeit in "setTimeout" einstellen.

1
formidablecoder

Dies funktioniert mit einer regulären HTML-Taste.

    <input id="Button1"
    onclick="this.disabled='true';" type="button"
    value="Submit" name="Button1"
    runat="server" onserverclick="Button1_Click">

Die Schaltfläche ist deaktiviert, bis das Postback abgeschlossen ist, um ein Doppelklicken zu verhindern.

0
FJT
<script type = "text/javascript">
function DisableButtons() {
    var inputs = document.getElementsByTagName("INPUT");
    for (var i in inputs) {
        if (inputs[i].type == "button" || inputs[i].type == "submit") {
            inputs[i].disabled = true;
        }
    }
}
window.onbeforeunload = DisableButtons;
</script>
0
Imad

Sie können dies mit Javascript tun. in Ihrem form-Tag onsubmit="javascript:this.getElementById("submitButton").disabled='true';"

0
steinberg