0

为了亲身体验,我正在生成随机数并在提交时比较它们的总和,但是每次按下按钮,随机数都在变化,我该如何停止这种情况?我考虑了不同的实验,但无法做到这一点。这是我的随机数类代码:

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

}

我怎样才能完成这个?

谢谢。

4

1 回答 1

0

由于您是在 Page Load 事件之外创建 Captcha 的对象,因此每当发生对页面的调用时都会重新创建它。

您可能知道互联网是无状态的,因此每当调用 Page 时,都会生成一个新页面,从而生成新的 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 类标记为可序列化,因为它可能会引发错误。

我希望这将有所帮助。

问候,

萨马尔

于 2013-07-25T06:39:33.890 回答