3

我的网页中有几个按钮,并试图通过使用 countClick 方法来检查用户按下的点击次数来限制按钮点击。在我下面的代码中,当用户单击第一个按钮时,将自动为他们单击第二个按钮。如果他们选择了第二个按钮,第三个按钮也会被自动点击,其余的按钮依此类推。但是在我的情况下,他们只能点击一次,因为一键点击了 2 个按钮。所以,当他们点击一次时,我不能让他们第二次点击。

我的问题是我的 countClick 方法不起作用。当我运行我的页面时,可以选择我的所有按钮,并且它不会将用户限制为仅单击 1 个按钮。

这是我的 .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();
}

这是我在 .cs 中的 countClick 方法:

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

3 回答 3

7

存储counter为会话变量。

因为您在函数中声明它,所以对于该函数调用的特定实例来说,它是唯一的。因此,它每次都重置为 0。

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());
    }
}

然后,我还将通过将以下内容添加到您的页面加载方法来确保在进行刷新时会话值丢失:

if (!(Page.IsPostBack)){
   Session["counter"] = null;
}
于 2012-07-24T14:41:13.280 回答
4

我在这里看到两个问题:

首先,counter需要是一个会话变量,其次,您可能应该在修改页面上的任何内容之前调用 countClick() 并使其返回bool,以便您判断它是否成功。

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;
    }
}
于 2012-07-24T14:49:24.273 回答
3

通过在方法中声明它,您的countButtonClick方法counter用作局部范围的变量。这意味着每次调用该方法时,都会创建计数器并将其初始化为 0。此外,不会在回发中保留点击次数。即使您将计数器声明移到 之外,由于页面生命周期countButtonClick的工作方式,每次单击按钮时,计数器变量都会重置为 0 。解决这个问题的方法是以某种方式存储计数器,例如会话或视图状态。

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());
   }
}

您可能还需要添加重置方法,具体取决于您的页面需要执行的操作。

于 2012-07-24T14:42:40.393 回答