Ich habe eine asp.net App, die ich die Schaltflächen deaktivieren möchte, sobald sie geklickt werden, um mehrere Übermittlungen zu verhindern. Ich würde gerne jQuery dafür verwenden, da die Seite es ohnehin schon reichlich nutzt.
Was ich versucht habe ist:
%Vor%Oben wird die Schaltfläche deaktiviert, und die Seite wird übergeben, aber die asp.net-Schaltfläche im Klick-Handler wird nie aufgerufen. Entfernen Sie einfach die oben genannten und die Tasten funktionieren wie gewohnt.
Gibt es einen besseren Weg? Oder, was mache ich falsch?
AKTUALISIEREN Okay, ich hatte endlich ein wenig Zeit, um eine ganz einfache Seite zusammenzustellen.
%Vor%Der Code dahinter sieht folgendermaßen aus:
%Vor%Wenn Sie auf eine Schaltfläche klicken, werden offensichtlich die Schaltflächen deaktiviert, aber WEDER der Schaltflächenklicks werden ausgeführt.
Gerendertes HTML
%Vor%Ich wollte nur eine zusätzliche Auflösung hinzufügen. Wir haben uns dazu entschlossen, den Button nach dem Klick einfach komplett zu entfernen und durch etwas Text zu ersetzen.
Um das zu tun, haben wir:
%Vor%Beachten Sie, dass dies den Knopf verbirgt und dann etwas HTML nach dem Tastencode einfügt. Wenn Sie es ausblenden, können Sie mit .Net den Onclick-Handler während des Postbacks ausführen und ihn als anklickbares Objekt auf dem Bildschirm entfernen.
Sie können es auf eine etwas andere Art und Weise machen:
%Vor% Was dies bewirkt, macht zukünftige Klicks unwirksam, was dazu führt, dass sie nichts tun. Wenn Sie eine Eingabe deaktivieren, wird auch das Schlüssel / Wert-Paar nicht mit dem <form>
gesendet, sodass Ihre serverseitige Aktion, die von ihr ausgelöst wird, nicht funktioniert.
Es ist erwähnenswert, dass Sie in jQuery 1.4.3 Folgendes verkürzen können:
%Vor%Der Ansatz, die Schaltfläche vor dem Senden zu deaktivieren, hat zwei Auswirkungen: -
a) Die Schaltfläche wird deaktiviert angezeigt.
b) Der Wert der Schaltfläche wird nicht in den Formularparametern angegeben.
Wenn der Wert der Schaltfläche nicht auf dem Server veröffentlicht wird, weiß ASP.Net nicht, welche Schaltfläche gedrückt wurde, und daher wird der relevante OnClick-Handler nicht ausgeführt.
Um zu überprüfen, fügen Sie folgendes Ihrem Code hinter
hinzu %Vor%Und dann renne die Seite (beide mit J. S. zum Deaktivieren der Tasten und ohne). Wenn der Wert der Schaltfläche nicht an den Server gesendet wird, weiß ASP.Net nicht, welche Schaltfläche gedrückt wurde, und daher wird der relevante OnClick-Handler nicht ausgeführt.
Nur eine weitere Beobachtung. Alternativ können Sie die Benutzeroberfläche mit einer schönen Overlay beschäftigt Nachricht sperren.
Der Markup-Teil:
%Vor%
Der Code dahinter:
%Vor%Sehen Sie sich das jQuery BlockUI-Plug-in
anWenn Sie ASP.NET-Validierungssteuerelemente auf Ihrer Seite haben, wird es kompliziert. Aber das wurde schon vorher beantwortet: Deaktivieren Sie die Schaltfläche bei der Formularübergabe
Fügen Sie dieses Attribut zu Ihrer Schaltfläche hinzu:
%Vor%Dies fügt etwas wie folgt in onclick ein:
%Vor%Dieser Code führt zu einem Postback, auch wenn die Schaltfläche deaktiviert ist. Es ist ein wenig interessanter, einen Bestätigungsdialog zu zeigen und zu erlauben, dass der Postback abgebrochen wird:
%Vor% Um zu verhindern, dass der Postback sofort auftritt, entfernen Sie den von .net eingefügten onclick-Code und binden ihn nach Ihrer eigenen Funktion mit jQuery. Verwende event.stopImmediatePropagation()
, um den Postback zu verhindern:
Die Antwort von Nick Craver ist bei weitem die beste Lösung, die ich irgendwo im Netz gefunden habe. Es gibt jedoch eine Situation, in der die Lösung nicht gut funktioniert - wenn das Formular Übergabeknöpfe in einem UpdatePanel enthält, dessen Eigenschaft UpdateMode auf "Conditional" und / oder ChildrenAsTriggers auf false gesetzt ist.
In diesen Situationen werden die Inhalte der Update-Panels nicht automatisch aktualisiert, wenn das asynchrone Postback abgeschlossen ist. Wenn diese Update-Panels also irgendwelche Submit-Buttons enthielten, würde die gegebene Lösung diese Buttons effektiv dauerhaft deaktiviert lassen.
Die folgende Erweiterung der Lösung behebt dieses Problem, indem die Schaltflächen nach einem asynchronen oder "teilweisen" Postback erneut aktiviert werden:
%Vor%Dazu müssen Sie das Eingabeschaltattribut verwenden, um alle Steuerelemente zu deaktivieren
%Vor%Für weitere Details überprüfen Sie diesen Link