3 votes

La méthode CountClick pour les boutons ne fonctionne pas

J'ai quelques boutons dans ma page web et j'essayais de limiter les clics des boutons en ayant une méthode countClick pour vérifier le nombre de clics que les utilisateurs ont fait. Dans mes codes ci-dessous, lorsque les utilisateurs cliquent sur le premier bouton, le deuxième bouton sera automatiquement cliqué pour eux. Et s'ils choisissent le deuxième bouton à la place, le troisième bouton sera automatiquement cliqué pour eux aussi et ainsi de suite pour le reste des boutons. Cependant, dans mon cas, ils ne peuvent cliquer qu'une seule fois, car un seul clic permet de cliquer sur deux boutons. Ainsi, lorsqu'ils ont cliqué une fois, je ne peux pas leur permettre de cliquer une deuxième fois.

Mon problème est que ma méthode countClick ne fonctionne pas. Lorsque je lance ma page, tous mes boutons peuvent être sélectionnés et l'utilisateur n'est pas limité à un seul clic.

Voici mon code .cs :

protected void Button1_Click(object sender, EventArgs e)
{
    Button1.Text = "Booked";
    Button1.BackColor = System.Drawing.Color.Blue;
    Button2.Text = "Booked";
    Button2.BackColor = System.Drawing.Color.Blue;
    countButtonClick();
}
protected void Button2_Click(object sender, EventArgs e)
{
    Button2.Text = "Booked";
    Button2.BackColor = System.Drawing.Color.Blue;
    Button3.Text = "Booked";
    Button3.BackColor = System.Drawing.Color.Blue;
    countButtonClick();
}
protected void Button3_Click(object sender, EventArgs e)
{
    Button3.Text = "Booked";
    Button3.BackColor = System.Drawing.Color.Blue;
    Button4.Text = "Booked";
    Button4.BackColor = System.Drawing.Color.Blue;
    countButtonClick();
}
protected void Button4_Click(object sender, EventArgs e)
{
    Button4.Text = "Booked";
    Button4.BackColor = System.Drawing.Color.Blue;
    countButtonClick();
}

Voici ma méthode countClick dans le fichier .cs :

private void countButtonClick()
{
    int counter = 0;
    counter++;
    if (counter >= 1)
    {
        Response.Write("You can only select 2 slots! " + DateTime.Now.ToString());
    }
}

7voto

Curt Points 42871

Magasin counter comme une variable de session.

Comme vous le déclarez à l'intérieur de votre fonction, il est unique pour cette instance spécifique de cet appel à la fonction. Par conséquent, il est remis à 0 à chaque fois.

private void countButtonClick()
{    
    int counter = 0;
    if (!(Session["counter"])){
       counter = (int)Session["counter"];
    }
    counter++;
    Session["counter"] = counter;

    if (counter >= 1)
    {
        Response.Write("You can only select 2 slots! " + DateTime.Now.ToString());
    }
}

Je m'assurerais également que la valeur de la session est perdue lors d'un rafraîchissement en ajoutant ce qui suit à votre méthode de chargement de page :

if (!(Page.IsPostBack)){
   Session["counter"] = null;
}

4voto

Steve Czetty Points 3505

Je vois deux problèmes ici :

D'abord, counter doit être une variable de session, et deuxièmement, vous devriez probablement appeler countClick() avant de modifier quoi que ce soit sur la page, et lui faire retourner bool pour que vous puissiez savoir si ça a réussi ou non.

private bool countClick()
{
    if (Session["clicks"] == null)
    {
        Session["clicks"] = 1;
        return true;
    }
    if (++((int)Session["clicks"]) > 1)
    {
         Response.Write("...");
         return false;
    }
    return true;
}

protected void Button1_Click(object sender, EventArgs e)
{
    if (countClick())
    {
        Button1.Text = "Booked";
        Button1.BackColor = System.Drawing.Color.Blue;
        Button2.Text = "Booked";
        Button2.BackColor = System.Drawing.Color.Blue;
    }
}

3voto

Votre countButtonClick la méthode utilise counter comme une variable à portée locale, en la déclarant à l'intérieur de la méthode. Cela signifie que chaque fois que la méthode est appelée, le compteur sera créé et initialisé à 0. De plus, le nombre de clics ne sera pas préservé lors des retours en arrière. Même si vous déplacez la déclaration du compteur en dehors de la méthode countButtonClick chaque fois que l'on clique sur un bouton, la variable du compteur est remise à 0, en raison de la façon dont la fonction de comptage est utilisée. cycle de vie des pages fonctionne. Pour résoudre ce problème, il faut stocker le compteur d'une manière ou d'une autre, par exemple dans l'état de la session ou de la vue.

private int counter = 0;
protected void Page_Load()
{
   if(!Page.IsPostback)
   {
      ViewState["MyClickCounter"] = 0;
   }
   else
   {
      counter = (int)ViewState["MyClickCounter"];
   }
}
private void countButtonClick()
{
   counter++;
   ViewState["MyClickCounter"] = counter;
   if (counter >= 1)
   {
      Response.Write("You can only select 2 slots! " + DateTime.Now.ToString());
   }
}

Vous pouvez également ajouter une méthode de réinitialisation, en fonction de ce que votre page doit faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X