2013-07-25 30 views
0

對於親身體驗,我會生成隨機數字,然後在提交時比較它們的總和,但每次我按下按鈕,隨機數字都在變化,我該如何停止發生這種情況?我考慮過不同的實驗,但無法做到這一點。 這裏是隨機數我的類代碼:如何在ASP.NET中使用我自己的隨機驗證碼?

public class Captcha 
{ 
    int num1, num2, total; 
    public int N1 
    { 
     get 
     { 
      return num1; 
     } 
    } 
    public int N2 
    { 
     get 
     { 
      return num2; 
     } 
    } 
    public int Total 
    { 
     get 
     { 
      return total; 
     } 
    } 
    Random r = new Random(); 
    public Captcha() 
    { 
     Random r = new Random(); 
     num1 = r.Next(1, 11) * 10; 
     num2 = r.Next(1, 11); 
     total = num1 + num2; 
    } 

} 

現在,我用這一個在Page_Load事件是這樣的:

Captcha c = new Captcha(); 
protected void Page_Load(object sender, EventArgs e) 
{ 
    Label2.Text = c.N1.ToString(); 
    Label3.Text = c.N2.ToString(); 

} 

我怎樣才能實現這個呢?

謝謝。

+0

您可以發佈您點擊按鈕的代碼? – samar

+0

按鈕代碼正在做很多事情,但我使用captcha比較,所以它就像IF(TextBox2.Text.Equals(c.Total.ToString())){......執行其他代碼...} –

回答

0

由於您在頁面加載事件之外創建Captcha對象,因此只要發生頁面調用,就會重新創建該對象。

您可能會意識到,互聯網是無狀態的,所以每當有一個頁面調用,一個新頁面生成,因此新的驗證碼對象。所以你需要在視圖狀態等狀態管理中維護Captcha對象。

你的代碼應該是這樣的。

Captcha c; 
protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     c = new Captcha(); 
     Label2.Text = c.N1.ToString(); 
     Label3.Text = c.N2.ToString(); 

     ViewState["c"] = c; 
    } 
} 

然後在按鈕上單擊您需要鍵入將視圖狀態轉換回「c」。像這樣的東西。

//button click 
c = (Captcha)ViewState["c"]; 
if(TextBox1.Text.Equals......) 

也許你需要標記您的驗證碼類作爲序列化,因爲它可能會引發錯誤。

我希望這會有所幫助。

問候,

薩馬

+0

我想到了這一點,但如果我創建新的驗證碼對象,那麼數字和總和將被改變。請看我的構造函數。 –

+0

查看我上面編輯過的帖子。 – samar

+0

我會看看。謝謝。 –

相關問題