2013-07-25 32 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

我会看看。谢谢。 –

相关问题