2012-07-24 66 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