J'ai l'événement onclick suivant pour un bouton. une fois que cet événement est terminé, je veux désactiver le bouton. Quelqu'un peut-il m'aider à comprendre comment le faire?
Voici le code que j'exécute sur l'événement buttonclick.
protected void Button3_Click(object sender, EventArgs e)
{
if (Session["login"] != null && Session["db"] != null)
{
digit b = new digit();
String digitformed = b.formdigit(this.DropDownList1, this.TextBox1, this.TextBox2);
chekcount c = new chekcount();
int count = c.getmaxcountforjud_no(digitformed);
int addtocount = count + 1;
String name = Session["login"].ToString();
String databs = Session["db"].ToString();
String complex_name = name + databs;
if (DropDownList2.SelectedItem.Text != "New")
{
update u = new update();
u.update1(this.Editor1, digitformed, this.TextBox3, complex_name, name, this.DropDownList2);
Response.Write(@"<script language='javascript'>alert('Updated')</script>");
}
else
{
save d = new save();
d.dosave(this.Editor1, addtocount, digitformed, this.TextBox3, complex_name, name);
Response.Write(@"<script language='javascript'>alert('Saved')</script>");
}
}
else
{
Response.Redirect("log.aspx");
}
}
Voici le bouton que je veux désactiver.
<asp:Button ID="Button3" runat="server" Text="Save" onclick="Button3_Click"
Visible="False" />
As-tu essayé?:
protected void Button3_Click(object sender, EventArgs e)
{
Button3.Enabled = false;
//rest of code
}
Utilisez les propriétés OnClientClick et UseSubmitBehavior du contrôle de bouton.
<asp:Button runat="server" ID="BtnSubmit"
OnClientClick="this.disabled = true; this.value = 'Submit in progress...';"
UseSubmitBehavior="false"
OnClick="BtnSubmit_Click"
Text="Click to Submit" />
OnClientClick vous permet d'ajouter un script OnClick côté client. Dans ce cas, le JavaScript désactivera l'élément button et changera sa valeur de texte en un message de progression. Une fois la publication terminée, la page nouvellement rendue rétablira le bouton dans son état initial sans travail supplémentaire.
La désactivation d’un bouton de soumission côté client a pour inconvénient d’annuler la soumission du navigateur, et donc la publication. Définir la propriété UseSubmitBehavior sur false indique à .NET d'injecter le script client nécessaire pour déclencher la publication de toute façon, au lieu de s'appuyer sur le comportement de soumission du formulaire du navigateur. Dans ce cas, le code qu'il injecte serait:
__doPostBack('BtnSubmit','')
HTML redéfini:
<input type="button" name="BtnSubmit"
onclick="this.disabled = true; this.value = 'Submitting...';__doPostBack('BtnSubmit','')"
value="Submit Me!" id="BtnSubmit" />
Cela devrait vous donner le comportement souhaité.
De: http://encosia.com/disable-a-button-control-during-postback/ Crédit: Dave Ward (Twitter: @Encosia)
Vous devez définir la propriété Enabled du bouton dans le code côté serveur, comme indiqué par d'autres afficheurs. Toutefois, si vous essayez d’empêcher plusieurs envois à partir du même bouton, vous aurez besoin d’une tactique légèrement différente.
Ajouter une méthode à votre classe:
static void DisableButtonDuringPostback(Page page, Button control)
{
StringBuilder sb = new StringBuilder();
sb.Append("this.disabled = true;");
sb.Append(page.ClientScript.GetPostBackEventReference(control, control.ID.ToString()));
sb.Append(";");
control.Attributes.Add("onclick", sb.ToString());
}
Dans Page_Load, ajoutez
DisableButtonDuringPostback(this.Page, Button3);
<asp:Button onclick="Button3_Click" ID="Button3" runat="server" Text="Save"
OnClientClick="this.disabled = true; this.value = 'please wait ..';"
UseSubmitBehavior="false" />
///count number of button click
var counter = 0;
function countclickbutton() {
counter++;
if (counter > 1) {
alert("proessing..please wait.");
//do not allow to again click
return false;
}
else {
return true;
}
}
appelez ceci onClientClick of button
Voir le code marqué
protected void Button3_Click(object sender, EventArgs e)
{
** if (Session["Clicked"] == null)
Session["Clicked"] = true;
else
{
Button3.Enabled = false;
return;
} **
if (Session["login"] != null && Session["db"] != null)
{
digit b = new digit();
String digitformed = b.formdigit(this.DropDownList1, this.TextBox1, this.TextBox2);
chekcount c = new chekcount();
int count = c.getmaxcountforjud_no(digitformed);
int addtocount = count + 1;
String name = Session["login"].ToString();
String databs = Session["db"].ToString();
String complex_name = name + databs;
if (DropDownList2.SelectedItem.Text != "New")
{
update u = new update();
u.update1(this.Editor1, digitformed, this.TextBox3, complex_name, name, this.DropDownList2);
Response.Write(@"<script language='javascript'>alert('Updated')</script>");
}
else
{
save d = new save();
d.dosave(this.Editor1, addtocount, digitformed, this.TextBox3, complex_name, name);
Response.Write(@"<script language='javascript'>alert('Saved')</script>");
}
}
else
{
Response.Redirect("log.aspx");
}
}
si vous voulez le faire en utilisant jquery que
$('#button3').attr("disabled", true);
Ceci est un ancien post, mais je ne pense pas qu'il ait été complètement répondu.
Premièrement, dans ASP.NET WebForms, vous envoyez une demande HTTP GET
au serveur Web, qui traite votre demande et génère le code HTML côté client que le navigateur doit restituer.
Lorsque vous interagissez avec un contrôle côté serveur, les valeurs sont contenues dans le champ de saisie caché VIEWSTATE
des propriétés (tel que le booléen de Enabled
).
Lorsque vous cliquez sur un bouton, il envoie une demande HTTP POST
au serveur Web situé sur la même page. C'est pourquoi l'événement Page_Load
est déclenché lorsque vous cliquez sur le bouton.
Une fois que la demande HTTP POST
a été traitée, elle retournera le code HTML que le navigateur pourra restituer. Pour cette raison, si vous avez le code suivant dans votre événement Page_Load
:
if (Page.IsPostBack) { Button3.Enabled = false; }
Il ne sera pas indiqué à l'utilisateur qu'il a été désactivé jusqu'à ce que la demande HTTP POST
ait été traitée et que le code côté client mis à jour ait été renvoyé.
D'après la question initiale, il semblait que le serveur prenait plusieurs secondes pour renvoyer une réponse. Par conséquent, plusieurs événements de publication pouvaient être déclenchés en cliquant à plusieurs reprises sur le bouton.
Une façon simple (mais ennuyeuse) de résoudre votre problème serait d’avoir une variable HTML button
exécutant une variable function
en JavaScript qui la désactive et déclenche l’événement onclick d’un contrôle côté serveur. Le problème avec ceci serait alors que lorsque la demande HTTP POST
renvoie une réponse, elle rendrait le HTML button
normal activé. Pour résoudre ce problème, vous pouvez simplement le désactiver en JavaScript à l'aide de code ASP.NET intégré. Voici un exemple:
Fichier .ASPX
<button id="clientButton" onclick="javascript:update();" />
<asp:Button ID="serverButton" OnClick="serverButton_OnClick" runat="server" />
<script type="text/javascript">
<% if (Page.IsPostBack) { %>
document.getElementById("clientButton").enabled = false;
<% } %>
function update() {
document.getElementById("clientButton").enabled = false;
document.getElementById("<%= serverButton.ClientID %>").click();
}
</script>
<style type="text/css">
#<%= serverButton.ClientID %> {
visibility: hidden;
display: none;
}
</style>
Fichier .ASPX.CS
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
// Triggered when serverButton has 'javascript:click()' triggered
}
}
Pour les applications WPF
Button1.IsEnabled = false; // Replace Button1 with your button name, false disables button