如何在ASP.NET中使用我自己的随机验证码?

时间:2013-07-25 06:06:41

标签: asp.net random captcha

对于实践经验,我会生成随机数并在提交时比较它们的总和,但每次按下按钮,随机数都在变化,我怎么能停止发生这种情况?我考虑过不同的实验,但不能这样做。 这是随机数的类代码:

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();

}

我怎样才能完成这个?

感谢。

1 个答案:

答案 0 :(得分:0)

由于您在页面加载事件之外创建了Captcha的对象,因此只要对页面进行调用,就会重新创建它。

您可能知道互联网是无状态的,因此每当调用页面时,都会生成新页面,从而生成新的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......)

也许您需要将Captcha类标记为可序列化,因为它可能会引发错误。

我希望这会有所帮助。

此致

萨马