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?
Ich habe das gefunden und es funktioniert:
btnSave.Attributes.Add(
"onclick",
"this.disabled = true;" + ClientScript.GetPostBackEventReference(btnSave, null) + ";");
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;
Ü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.
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.
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" />
<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>
Sie können dazu das clientseitige onclick event verwenden:
yourButton.Attributes.Add("onclick", "this.disabled=true;");
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
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>
jQuery verwenden:
$('form').submit(function(){
$(':submit', this).click(function() {
return false;
});
});
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" />
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
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.
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.
<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>
Sie können dies mit Javascript tun. in Ihrem form
-Tag onsubmit="javascript:this.getElementById("submitButton").disabled='true';"