2012-07-24 67 views
3

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

我的问题是,我的countClick方法不起作用。当我运行我的页面时,我所有的按钮都可以被选中,并且不会限制用户只能点击一次按钮。

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

您可以指定用户(甚至多个用户?)何时可以点击和多长时间?这不是很清楚。他限制点击任何按钮多久?您应该使用数据库来存储它。 – 2012-07-24 14:41:13

+0

每次用户只能一次选择一个按钮来预约时间。我的逻辑是,当用户点击该特定按钮时,下一个按钮也会自动激活。这里是我想要实现的一个网站示例,但不同之处在于,该网站帮助用户自动点击6个按钮,但对于我的情况只有2个按钮。 – kelly 2012-07-24 14:47:28

回答

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; 
} 
+0

我输入得太慢了:( – 2012-07-24 14:44:14

+0

@EsotericScreenName Ha +1为你的努力:) – Curt 2012-07-24 14:45:02

+1

但是这不起作用,因为所有变量都放置在页面生命周期结束时的每个回发中。 – 2012-07-24 14:55:13

3

countButtonClick方法使用counter为本地变量,通过在方法中声明它。这意味着每次调用方法时,计数器都将被创建并初始化为0.此外,点击次数不会在回发期间保留。即使您将计数器声明移至countButtonClick之外,每次单击一个按钮时,由于page lifecycle的工作方式,计数器变量将重置为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()); 
    } 
} 

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

+0

非常感谢您的帮助! – kelly 2012-07-24 16:25:31

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; 
    } 
} 
+0

+1提及跨回发的数据持久性。 – 2012-07-24 14:53:09

+0

+1是迄今为止唯一的工作方法。 – 2012-07-24 14:56:45

+0

不好意思问,但会话中的“点击”是指什么? – kelly 2012-07-24 14:57:45