2011-06-01 57 views
1

我有網頁表單,我必須確保'提交'按鈕被點擊不超過3次。我有一些限制用戶在3次失敗嘗試後輸入任何內容的邏輯。如何檢查網頁是否僅提交3次?

這是我的邏輯,但我知道這是不對的:

protected void btnSubmit_Click(object sender, EventArgs e) 
{ 
    int count = 0; 
    count++; 
    if (count <= 3) 
    { 
     Function1(); 
    } 
    else 
     MessageBox("You submitted your information more than 3 times."); 

} 

這不會工作,因爲計數爲零每次頁面刷新時間。

+0

您是否需要在重定向頁面時重置計數器? – 2011-06-01 16:13:41

回答

1

保存變量頁面的ViewState。初始化頁面的第一負載的價值:

void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     this.ViewState["Count"] = 0; 
    } 
} 

Button.Click事件增加計數變量的值:

protected void btnSubmit_Click(object sender, EventArgs e)   
{    
    Int32 count = Int32.Parse(this.ViewState["Count"].ToString()) + 1; 
    this.ViewState["Count"] = count; 
    if (count > 3) 
    { 
     // Do something .. 
    } 
} 
+0

如果頁面被調用,ViewState將會丟失URL,Session會更持久(而Cookie更多)。 – Olaf 2011-06-01 16:08:01

+0

@Olaf:OP沒多說多少次使用這個頁面..他只是說數據會提交好幾次.. – 2011-06-01 16:10:28

+0

謝謝!我在會話中做了它,它工作:) – 2011-06-01 16:16:46

1

您可以將計數存儲在會話變量中。

int submitCount = 0; 
if (Session["submitCount"] != null) 
{ 
    submitCount = int.Parse (Session["submitCount"]); 
} 
// Code based on submitCount 
Session["submitCount"] = ++submitCount; // Save # of submits to session 
+0

我應該在global.asax中完成嗎? – 2011-06-01 16:02:08

+0

看我的編輯。你可以把你的代碼放在任何你想要的地方。 – Nik 2011-06-01 16:05:30

-1

不知道任何asp.net,但你應該使用會話保持that.logic的計數的背後應該是:

if (session variable do not exist) 
store session variable 

else 
(increment session variable) 

希望它有助於

+0

這不是一個答案。有人可以把它投票下來... – 2011-06-01 16:11:39

+0

@Akram我只是想幫助klm9971 – luca 2011-06-01 16:17:22

+0

我不是一個誰投了下來..我試圖警告你..太晚了 – 2011-06-01 16:18:44

0

這會工作(未測試):

protected void btnSubmit_Click(object sender, EventArgs e) 
    { 
     if(Session["Clicked"] != null) 
     { 
      int clicked = Convert.ToInt32(Session["Clicked"]) + 1; 
      if(clicked == 3) 
      { 
       MessageBox("You submitted your information more than 3 times."); 
       return; 
      } 
      else 
      { 
       Session["Clicked"] = clicked; 
      } 

     } 
     else 
     { 
      Session["Clicked"] = 1; 
     } 

     Function1(); 
    } 

Cookie甚至會更持久。

0

數據不會持續存在於所有Web請求中,因此您需要將計數存儲在某種形式的持久性存儲中。你有幾個選擇:餅乾,會話變量,視圖狀態,數據庫等。

數據庫可能是最安全的,因爲它位於服務器上,用戶不能篡改它,但它也更多的工作來設置。會話變量和視圖狀態的問題在於,雖然它們持續存在於Web請求中,但它們不是永久的,所以用戶將能夠在會話超時後提交第四個請求。 Cookie有同樣的問題。

重要的一點是數據不會跨請求保留,因此您必須研究將持久性存儲添加到您的網站的方法,並選擇最符合您需要的解決方案。

0

您也可以將該值存儲在隱藏字段中。

<asp:HiddenField ID="hfSubmitCount" runat="server" Value="0" /> 

protected void btnSubmit_Click(object sender, EventArgs e) 
{ 
    int count; 
    if(!int.TryParse(hfSubmitCount.Value, out count)) 
     count = 0; 
    count++; 
    hfSubmitCount.Value = count.ToString(); 
    if (count <= 3) 
     Function1();   
    else 
     MessageBox("You submitted your information more than 3 times."); 

}